为什么我无法从Derived访问M3方法?Intellisense仅显示基类中的M1和M2.如何将bc的参考从Base类型更改为Refernce Type,以便我可以访问M3方法.
class Program
{
static void Main(string[] args)
{
Base bc = new Derived();
bc.M3():// error
}
}
class Base
{
public void M1()
{
Console.WriteLine("M1 from BASE.");
}
public void M2()
{
Console.WriteLine("M2 from BASE.");
}
}
class Derived : Base
{
public void M3()
{
Console.WriteLine("M3 from DERIVED.");
}
}
Run Code Online (Sandbox Code Playgroud)
编译器必须M3
在编译时解析名称.这是在类型的引用上调用的,Base
并且Base
没有该名称的成员.它碰巧指向Derived
运行时的实例这一事实在这里没有影响,因为编译器正在查看编译时可用的信息.
是的,在这种特定情况下,编译器可以看到bc
总是初始化为一个Derived
值,因此它应该在那里看.然而,这不是c#编译器的工作原理.它仅查看所涉及引用的编译时类型