下面我来详细讲解一下在.NET(C#)中的new关键字的使用。
什么是new关键字
在面向对象的编程中,我们经常需要定义类及其成员。有时候,我们需要在一个派生类型中重新定义一个类的成员,这样我们就可以重新定义其行为,这时我们就可以使用new
关键字。
关于new
关键字的使用规则是:
- 当我们使用new
关键字声明一个成员时,它会隐藏基类的同名成员。
- 当我们在一个派生类中重新定义一个成员时,使用new
关键字告诉编译器,这个新成员是有意义的,不是错误。
- 如果不使用new
关键字并且在派生类中定义一个与基类同名的成员,编译器会给出警告。因为在基类中定义的同名成员会被派生类的成员隐藏起来,导致编译期类型检查问题。
如何使用new关键字
new
关键字主要有如下两种用法:
方法中的new关键字
使用方法中的new
关键字会隐藏父类的同名方法,但不是重写已有的方法。
示例:
class A
{
public void Method1()
{
Console.WriteLine("Class A's Method1()");
}
}
class B : A
{
public new void Method1()
{
Console.WriteLine("Class B's Method1()");
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.Method1(); // 输出结果:Class B's Method1()
A a = b;
a.Method1(); // 输出结果:Class A's Method1()
Console.ReadLine();
}
}
当我们通过子类实例调用这个方法时,实际上调用的是子类中的重载方法。如果我们将此实例转换成父类接口类型,再调用这个方法时,调用的是基类中的方法,而不是子类中的方法。
属性/变量中的new关键字
使用属性/变量中的new
关键字会隐藏父类的同名属性/变量。
示例:
class A
{
public int MyInt = 1;
}
class B : A
{
public new int MyInt = 2;
public void ShowResult()
{
Console.WriteLine("MyInt in A: {0}", base.MyInt);
Console.WriteLine("MyInt in B: {0}", MyInt);
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.ShowResult(); // 输出结果:MyInt in A: 1,在B中:2
Console.ReadLine();
}
}
在此示例中,我们定义了两个MyInt变量,分别位于A类和B类中。为了使这个示例更加清晰,我们可以使用ShowResults
方法,在控制台中显示这两个MyInt变量的值。在ShowResults
方法中,我们可以使用base
关键字访问基类中的MyInt变量,使用MyInt
关键字访问子类中的MyInt变量。
总结
这里,我们介绍了.NET(C#)中的new
关键字,它主要用于隐藏父类的同名成员。我们讨论了new
关键字在方法、属性和变量中的使用方法,并且提供了两个示例来说明使用new
的工作原理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net(c#)中的new关键字详细介绍 - Python技术站