C# 实例类型对从派生类调用方法的影响

C# 实例类型对从派生类调用方法的影响,c#,inheritance,instancetype,C#,Inheritance,Instancetype,假设我有以下几点: static void Main(string[] args) { DerivedClass input = new DerivedClass(); input.WriteName(); // Outputs BaseClass } class BaseClass { public void WriteName() { Console.WriteLine(GetName());//this.GetType() }

假设我有以下几点:

static void Main(string[] args)
{
    DerivedClass input = new DerivedClass();
    input.WriteName(); // Outputs BaseClass
}

class BaseClass
{
    public void WriteName()
    {
        Console.WriteLine(GetName());//this.GetType()
    }

    protected string GetName()
    {
        return "BaseClass";
    }
}

class DerivedClass : BaseClass
{
    protected new string GetName()
    {
        return "DerivedClass";
    }
}
我运行了一些关于调用
GetName()
方法的对象类型的测试(使用GetType())(我的意思是
DerivedClass.GetName
来自
WriteName
)。我知道
WriteName
无法在
DerivedClass
类中看到新方法,并且
GetName
方法被
new
关键字隐藏,但是实例类型(
DerivedClass
)对此没有任何影响吗?
调用
GetName
方法时,类型是否向上转换为基类?从Main方法调用时,派生类中的new关键字隐藏了该方法。GetName似乎提供了预期的结果。

派生类中的new关键字隐藏了该方法。但是这是从基类调用的,它总是从基类调用实现。即使下面的代码也会打印“基类”:


那么DerivedClass类型呢?是否有任何到基类的隐式转换来调用该方法?如果要调用派生类方法,则需要将基类方法标记为virtual,将派生方法标记为override。这样,如果对象是派生类型,它将从派生类调用该方法。是的,我知道这一点,但不知道如何在类型仍然是派生类时解析为调用
BaseClass.GetName()
public void WriteName()
{
        string className = "";
        if (this is DerivedClass)
        {
            className = ((DerivedClass)this).GetName();
        }
        else
        {
            className = this.GetName();
        }

        Console.WriteLine(className);
}