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

时间:2015-03-26 12:05:42

标签: 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()
    }

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

class DerivedClass : BaseClass
{
    protected new string GetName()
    {
        return "DerivedClass";
    }
}

我运行了一些关于调用GetName()方法的对象类型的测试(使用GetType())(我的意思是来自DerivedClass.GetName的{​​{1}})。我知道WriteName无法在WriteName类中看到新方法,DerivedClass方法被GetName关键字隐藏,但实例类型(new)却没有对此有什么影响? 是调用DerivedClass方法时向上扩展到基类的类型?从主方法GetName调用时似乎提供了预期的结果。

1 个答案:

答案 0 :(得分:0)

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

public void WriteName()
{
        string className = "";
        if (this is DerivedClass)
        {
            className = ((DerivedClass)this).GetName();
        }
        else
        {
            className = this.GetName();
        }

        Console.WriteLine(className);
}