在这种情况下,无需覆盖。您始终可以直接将派生对象引用分配给基类变量:
objBase myObjB = new objDerived();
请注意,创建实例然后立即重新分配也不是好习惯:
// Don't instantiate an object in the first line here,
// since you're going to assign it in the next line
objBase myObjB; //= new objBase();
myObjB = new objDervied();
至于:
所以假设这个 objDerived 类型有一个在 objBase 方法上使用 new 修饰符的方法,但我想将新方法与我的强制转换 objBase 对象一起使用。
您只能new
通过分配或转换回派生类来调用隐藏基类方法的方法:
objBase myObjB = new objDerived();
((objDerived)myObjB).Method(); // Will call objDerived.Method
myObjB
如果实际上没有引用objDerived
实例,这将在运行时失败。
这里的另一个选择是使用dynamic
. 使用dynamic
for 您的变量将导致发生动态调度,这将使变量有效地表现得好像它始终是“最衍生”的类型,并调用您的新方法。这实际上很有用,因为您可以在 C# 中有效地进行多次调度,即使它通常是静态类型的。这是一个完整的工作示例:
void Main()
{
Base b = new Derived();
dynamic d = b;
Console.WriteLine(d.Output());//This prints "Derived"
}
public class Base {
public string Output() {
return "Base";
}
}
public class Derived: Base {
public new string Output() {
return "Derived";
}
}