相关疑难解决方法(0)

为什么重载不起作用?

为什么启动程序后会显示C::Foo(object o)?

using System;

namespace Program
{
    class A
    {
        static void Main(string[] args)
        {
            var a = new C();
            int x = 123;
            a.Foo(x);
        }
    }

    class B
    {
        public virtual void Foo(int x)
        {
            Console.WriteLine("B::Foo");
        }
    }

    class C : B
    {
        public override void Foo(int x)
        {
            Console.WriteLine("C::Foo(int x)");
        }

        public void Foo(object o)
        {
            Console.WriteLine("C::Foo(object o)");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么当你打电话时C :: Foo,选择方法,而object不是int.什么是类B,该方法被标记为覆盖?

在类中C,有两个方法具有相同的名称但参数不同,是否没有重载?为什么不?在父母中重写的方法之一是否重要?它以某种方式禁用过载?

c# overloading

14
推荐指数
1
解决办法
455
查看次数

为什么这样做?方法重载+方法重写+多态

在以下代码中:

public abstract class MyClass
{
public abstract bool MyMethod(
        Database database,
        AssetDetails asset,
        ref string errorMessage);
}

public sealed class MySubClass : MyClass
{
    public override bool MyMethod(
        Database database,
        AssetDetails asset,
        ref string errorMessage)
    {
        return MyMethod(database, asset, ref errorMessage);
    }

    public bool MyMethod(
        Database database,
        AssetBase asset,
        ref string errorMessage)
    {
    // work is done here
}
}
Run Code Online (Sandbox Code Playgroud)

其中AssetDetails是AssetBase的子类.

为什么第一个MyMethod在传递AssetDetails时会在运行时调用第二个,而不是陷入递归的无限循环?

c# polymorphism overriding overloading

12
推荐指数
2
解决办法
2946
查看次数

C#选择与可选参数和多级继承所期望的方法不同的方法

在给定的示例中(对于代码样式而言,它是为了一个紧凑的自包含repro的兴趣),被调用的方法始终是B中的虚方法,它具有附加的整数参数,而我希望该方法在C将是一个叫做的人.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MethodChoosing
{
    class Program
    {
        static void Main(string[] args)
        {
            C c = new C();
            c.M();

            Console.ReadKey();
        }
    }

    public class A
    {
        public virtual void M(bool? a = null)
        {
            Console.WriteLine("base base");
        }
    }

    public class B : A
    {
        public override void M(bool? a = null)
        {
            Console.WriteLine("base override");
        }

        public virtual void M(bool? a = null, int? b = null)
        {
            Console.Write("base new");
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# inheritance optional-parameters

2
推荐指数
1
解决办法
1344
查看次数