Den*_*ish 1 c# inheritance new-operator
我试图理解C#中的继承,这就是为什么我要尝试一些样本,但我知道使用NEW关键字或没有新关键字的东西是相同的.
那为什么我们需要新关键字?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
List<int> col = new List<int>();
Class1 c1 = new Class1();
Class2 c11 = new Class2();
Class1 c111 = new Class3();
c1.setmessage();
c11.setmessage();
c111.setmessage();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
class Class1
{
private string member;
public void setmessage()
{
MessageBox.Show("Class1");
}
}
class Class2 : Class1
{
private string member;
public void setmessage()
{
MessageBox.Show("Class2");
}
}
Run Code Online (Sandbox Code Playgroud)
Ode*_*ded 13
new在此上下文中,关键字表示方法的阴影.
这意味着您不会覆盖基类中的方法,而是编写一个完全独立的方法,就继承而言.
如果编译器未用于未被覆盖的可覆盖方法,则会发出警告,因为大多数情况下这是一个错误,并且应该简单地覆盖该方法.在new那里有关键字表明阴影是一个明确的决定.
请参阅C#中的阴影和覆盖之间的区别?.
如果没有new关键字,则会出现编译器警告,因为编译器不确定您是否要隐藏它.您应该指定new或override,以便编译器知道您没有犯错误.
这类似于"为什么有private类成员的关键字,因为它们默认是私有的?" 和"为什么有一个internal类的关键字,因为它们默认是内部的?".常见的答案是,明确而不是隐含通常更好.