假设我有以下内容:
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
调用时似乎提供了预期的结果。
答案 0 :(得分:0)
该方法被派生类中的new关键字隐藏。但是这是从基类调用的,它总是从基类调用实现。即使以下代码也会打印“BaseClass”:
public void WriteName()
{
string className = "";
if (this is DerivedClass)
{
className = ((DerivedClass)this).GetName();
}
else
{
className = this.GetName();
}
Console.WriteLine(className);
}