c# - 如何从派生类中获取属性值?

时间:2017-03-28 11:06:27

标签: c# inheritance

我正在用C#编写一个控制台应用程序。

以下是代码:

interface ITest
{
    string str { get; }
}

public class BaseClass : ITest
{
    public virtual string str
    {
        get
        {
            return "BaseClass";
        }
    }
}

public class DerivedClass : BaseClass
{
    public new string str {
        get {
            return "DerivedClass";
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        ITest itest = new DerivedClass();

        Console.WriteLine(itest.str);
        Console.ReadKey();
    }
}

当我执行上面的代码时," BaseClass"即将作为输出。相反,我如何得到" DerivedClass"作为输出?

3 个答案:

答案 0 :(得分:8)

您需要override虚拟财产而不是new虚拟财产:

public override string str 
{
    get 
    {
        return "DerivedClass";
    }
}

答案 1 :(得分:4)

在派生类中使用new声明属性时,您将创建一个新成员,该成员在通过接口调用时不会被调用。请改用override

答案 2 :(得分:3)

您可以使用dynamic类型直接访问运行时类型。

Itest itest = new DerivedClass();
var str = ((dynamic)itest).str; // str == "DerivedClass"

如果您使用new关键字而不是override覆盖方法,则需要这样做。