关于成员变量的多态性事物

时间:2015-04-18 13:30:38

标签: c# .net polymorphism override

我总是认为我知道多态性,直到我见到下面的例子。

我有两个班,父亲和儿子。代码如下:

父亲:

public class Father
{
    public String name = "father";
    public virtual void dosth()
    {
        Console.WriteLine(name);
    }
}

子:

public class Son : Father
{
     public String name = "son";
     public override void dosth()
     {
          Console.WriteLine(name);
     }
}

我打电话给他们:

static void Main(string[] args)
{
    Father p = new Son();
    Console.WriteLine(p.GetType()); //print son
    p.dosth();                      //print son
    Console.WriteLine(p.name);      //print father
}

我认为,变量p指向一个子对象,所以首先,控制台将打印" Son"类型。我是对的。

然后p.dosth()会打电话给儿子dosth(),所以它会打印儿子"。我又回来了。

最后,p.name也应该是#34;儿子"。但是,这一次,我错了。它打印"父亲"。

我无法理解p变量的类型是儿子,为什么它仍然使用父亲的成员?

0 个答案:

没有答案