关于继承:从父类调用派生方法c#

calling a dervied method from a parent class c#

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

但是,这不起作用,因为总是使用父类的name属性,即使在子类中重新定义它也是如此。

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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继承的一个基本方面?


这是因为ToString()是虚拟的。

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