从父类调用派生方法c#

时间:2013-12-15 03:44:45

标签: c# inheritance

我在父类中定义ToString()的方式适用于几乎所有的后代类,这通常涉及调用名为Name的属性。此属性在子类中重新定义。

但是,这不起作用,因为始终使用父类的Name属性,即使我在后代类中重新定义它。

以下是一个例子:

using System;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Bar n = new Bar();
            Console.WriteLine(n);
            Console.ReadLine();
        }
    }

    class Foo
    {
        public override string ToString()
        {
            return MyName;
        }

        public string MyName { get { return "foo"; }}
    }

    class Bar : Foo
    {
        public new string MyName { get { return "bar";  }}
    }
}

此示例的输出为foo,但我希望它为bar

我做错了什么?或者我只是误解了C#中继承的一个基本方面?

1 个答案:

答案 0 :(得分:4)

这是因为ToString()virtual

virtual关键字添加到您的基本属性,并将new更改为派生属性中的override