使用new关键字在C#中继承

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#中的阴影和覆盖之间的区别?.


Ken*_*rey 5

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

这类似于"为什么有private类成员的关键字,因为它们默认是私有的?" 和"为什么有一个internal类的关键字,因为它们默认是内部的?".常见的答案是,明确而不是隐含通常更好.