override
-
用途:
override
用于在派生类中重写基类中的虚方法或抽象方法。- 重写的方法必须与基类中的方法具有相同的签名(方法名、参数列表和返回类型)。
- 基类中的方法必须声明为
virtual
、abstract
或已经由另一个override
方法重写。
-
多态性:
override
支持多态性,允许在运行时根据对象的实际类型来决定调用哪个方法版本。- 即使通过基类类型的引用调用方法,也会调用派生类中重写的方法。
-
示例:
public class BaseClass { public virtual void Method() { Console.WriteLine("Base Method"); } } public class DerivedClass : BaseClass { public override void Method() { Console.WriteLine("Derived Method (Overridden)"); } } // 使用 BaseClass baseInstance = new DerivedClass(); baseInstance.Method(); // 输出 "Derived Method (Overridden)"
new
-
用途:
new
通常用于实例化一个新的对象。- 在派生类中,
new
可以用来隐藏基类中的成员,这意味着派生类中的成员将取代基类中的成员,但不会改变其行为。 - 当使用
new
隐藏基类中的成员时,必须确保方法签名相同。
-
隐藏基类成员:
- 使用
new
关键字隐藏基类中的成员意味着通过派生类的对象直接调用该成员时,会使用派生类中的实现。 - 如果通过基类类型的引用调用成员,则会调用基类中的成员。
- 使用
-
示例:
public class BaseClass { public virtual void Method() { Console.WriteLine("Base Method"); } } public class DerivedClass : BaseClass { public new void Method() { Console.WriteLine("Derived Method (Hidden)"); } } // 使用 DerivedClass derivedInstance = new DerivedClass(); derivedInstance.Method(); // 输出 "Derived Method (Hidden)" BaseClass baseInstance = new DerivedClass(); baseInstance.Method(); // 输出 "Base Method"
总结:
override
用于实现多态性,重写基类中的虚方法或抽象方法,使得通过基类引用调用时也能得到派生类的行为。new
用于隐藏基类中的成员,使得通过派生类直接调用时使用派生类的实现,而通过基类引用调用时则使用基类的实现。