方法重写和方法隐藏
本文关键字:方法 隐藏 重写 | 更新日期: 2023-09-27 17:57:02
可能的重复项:
C#:新建与重写
class BaseAppXmlLogReaders
{
public virtual void WriteLog() { }
public void Add()
{
}
}
class DerivedAppXmlLogReaders : BaseAppXmlLogReaders
{
public override void WriteLog()
{
}
public new void Add()
{ }
}
class Demo
{
public static void Main()
{
BaseAppXmlLogReaders obj = new DerivedAppXmlLogReaders();
obj.Add();//Call base class method
obj.WriteLog();//call derived class method
}
}
我有点困惑,但它使派生AppXmlLogReader的对象 但它调用基类的 Add() 方法和派生类的 WriteLog() 方法。
如果您调用非虚拟方法,则将调用您持有引用的类型的方法,在您的情况下BaseAppXmlLogReaders
。如果要调用 virtual
方法,框架会将调用指向"正确"、重写的方法。这就是为什么虚拟通话的成本略高,以及为什么在99%的情况下使用new
是一个坏主意。我还没有看到合理使用new
.
这是因为您将其处理为BaseAppXmlLogReaders
.如果使用以下行,则将调用派生类的 Add 方法。
var obj = new DerivedAppXmlLogReaders(); // or DerivedAppXmlLogReaders obj = ...
编辑:
但是,您仍然可以通过以下方式调用派生类的方法:
(obj as DerivedAppXmlLogReaders).Add();