C#中的继承误解

guy*_*yrt 5 c# inheritance

我试图了解继承在C#中的工作方式.基本上,我有一个基类Base,它具有简单的函数sayIt.该函数使用在子类中重新定义的属性"i".在这里,它从0重新定义为1.当我运行这个程序时,我得到"0"作为输出而不是"1"这是我所期望的(因为在python中我会得到1).任何人都可以解释为什么,更重要的是,这是否是C#支持的模式?

class Program
{
    static void Main(string[] args)
    {
        Derived d = new Derived();
        Console.WriteLine(d.sayIt());
        Console.ReadLine();
    }
}

class Base
{
    int _i = 0;
    public int i
    {
        get { return _i; }

    }

    public String sayIt()
    {
        return Convert.ToString(this.i);
    }
}

class Derived : Base
{
    int _i = 1;
    public new int i
    {
        get { return _i; }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 8

  1. 将该属性标记为类virtualBase

  2. 替换newoverride毗邻内的财产Derived类.

1.是必要的,因为默认情况下,成员在c#中是非虚拟的.和2是必要的,因为使用new会破坏virtual解决通,请问是不是你的想.

有一个关于好的文章newoverrideMSDN上:知道何时使用覆盖和新关键字(C#编程指南).

所述override改性剂延伸的基类的方法,和new改性剂隐藏它.