如何将Base对象的引用更改为Derived,并将其作为Derived类型进行实例化

Ale*_*vid 4 c# inheritance

为什么我无法从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)

Jar*_*Par 6

编译器必须M3在编译时解析名称.这是在类型的引用上调用的,Base并且Base没有该名称的成员.它碰巧指向Derived运行时的实例这一事实在这里没有影响,因为编译器正在查看编译时可用的信息.

是的,在这种特定情况下,编译器可以看到bc总是初始化为一个Derived值,因此它应该在那里看.然而,这不是c#编译器的工作原理.它仅查看所涉及引用的编译时类型