2012-04-06 84 views
2

我想了解C#中的继承,这就是为什么我尝试了一些示例,但我知道用NEW关键字或没有新的关键字事情是相同的。C#中的继承与新的关键字

那么为什么我们需要新的关键字?

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"); 
    } 
} 
+0

这只是一个关键字,用来告诉编译器你知道你正在做一些可能会炸毁你的东西。所以它停止警告你。 – 2012-04-06 13:14:39

回答

13

new关键字,在此上下文中表示遮蔽的方法的

这意味着你是不是覆盖从基类中的方法,但是写一个完全独立的一个,就继承关注。

如果编译器未用于未覆盖的可重写方法,则会发出警告,因为大多数情况下这是一个错误,并且该方法应该被重写。有关键字new表明影子是一个明确的决定。

参见Difference between shadowing and overriding in C#?

5

如果没有new关键字,会出现编译器警告,因为编译器不确定是否要隐藏它。您应该指定newoverride,以便编译器知道您没有犯错。

这类似于“为什么会有类似成员的private关键字,因为它们默认为私人?”和“为什么类有internal关键字,因为它们默认是内部的?”。常见的答案是,明示比隐含更好。