要实现不使用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来重写方法,仅返回基类方法的效果。