C#是一种面向对象的编程语言,它支持继承机制。在C#中,关键字"new"用于声明一个新的成员,它可以隐藏基类中具有相同名称的成员。
继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在不修改父类的情况下添加新的功能或修改已有功能。
当一个子类继承一个父类时,它可以使用父类中的成员,包括字段、属性、方法和事件。然而,如果子类中定义了一个与父类中同名的成员,那么子类的成员将隐藏父类的成员。这时,使用"new"关键字可以显式地声明一个新的成员,以避免隐藏父类的成员。
下面是一个示例,演示了C#中新关键字的继承问题:
using System;
class BaseClass
{
public void Method()
{
Console.WriteLine("BaseClass Method");
}
}
class DerivedClass : BaseClass
{
public new void Method()
{
Console.WriteLine("DerivedClass Method");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass baseObj = new BaseClass();
baseObj.Method(); // 输出:BaseClass Method
DerivedClass derivedObj = new DerivedClass();
derivedObj.Method(); // 输出:DerivedClass Method
BaseClass derivedAsBase = new DerivedClass();
derivedAsBase.Method(); // 输出:BaseClass Method
}
}
在上面的示例中,BaseClass是一个基类,DerivedClass是一个派生类。DerivedClass中使用了"new"关键字来声明一个新的Method方法,它隐藏了基类中的Method方法。当我们创建DerivedClass的实例并调用Method方法时,将会调用DerivedClass中的方法。
然而,当我们将DerivedClass的实例赋值给一个基类类型的变量(derivedAsBase),并调用Method方法时,将会调用基类中的方法。这是因为基类类型的变量只能访问基类中的成员,而无法访问派生类中隐藏的成员。
总结起来,C#中的"new"关键字用于声明一个新的成员,以避免隐藏父类的成员。在继承关系中,当子类中定义了一个与父类中同名的成员时,可以使用"new"关键字显式地声明一个新的成员。
领取专属 10元无门槛券
手把手带您无忧上云