要实现不使用virtual和override来重写方法,可以使用委托和匿名方法来达到相同的效果。下面是一个示例代码:
using System;
public class BaseClass
{
public void PrintMessage()
{
Console.WriteLine("This is the base class method.");
}
}
public class DerivedClass : BaseClass
{
public new void PrintMessage()
{
Action print = base.PrintMessage;
print.Invoke();
}
}
public class Program
{
public static void Main(string[] args)
{
DerivedClass derived = new DerivedClass();
derived.PrintMessage(); // 输出:This is the base class method.
BaseClass baseObj = derived;
baseObj.PrintMessage(); // 输出:This is the base class method.
}
}
在上面的代码中,DerivedClass
没有使用virtual
和override
关键字来重写PrintMessage
方法。而是使用了new
关键字来隐藏基类方法,并创建了一个委托Action
来调用基类方法。
在DerivedClass
中,PrintMessage
方法中的Action print = base.PrintMessage;
将基类的PrintMessage
方法赋值给委托print
。然后通过print.Invoke()
来调用基类的方法。
在程序的Main
方法中,我们创建了DerivedClass
的实例derived
,并调用PrintMessage
方法,输出了基类方法的内容。接着将derived
赋值给基类类型的变量baseObj
,同样调用PrintMessage
方法,同样输出了基类方法的内容。
这样就实现了不使用virtual
和override
来重写方法,仅返回基类方法的效果。