为什么启动程序后会显示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,有两个方法具有相同的名称但参数不同,是否没有重载?为什么不?在父母中重写的方法之一是否重要?它以某种方式禁用过载?
看看会员查询
首先,构造在T中声明的名为N的所有可访问(第3.5节)成员的集合,并构造T的基本类型(第7.3.1节). 包含覆盖修饰符的声明将从集合中排除.如果没有名为N的成员存在且可访问,则查找不会产生匹配,并且不评估以下步骤.
所以根据这个,它会使用
public void Foo(object o)
Run Code Online (Sandbox Code Playgroud)
第一