使用带有setter和getter的getter在C ++ / CLI中覆盖base属性

时间:2012-07-11 17:48:38

标签: c# inheritance properties abstract

我有一个基础对象,它实现了一个只有一个getter的属性。在我的子类中,我想实现两者:

public ref class NTObject
{
  property ::System::String ^ Name {
    virtual ::System::String ^ get ();
  }
};

public ref class NTNamed
  : ROOTNET::NTObject,
    ROOTNET::Interface::NTNamed
{
  property ::System::String ^ Name {
    virtual ::System::String ^ get () override;
    virtual void set (::System::String ^ value);
  }
};

然后我编写以下简单代码:

    static void Main(string[] args)
    {
        var n = new ROOTNET.NTNamed("hi", "there");
        Console.WriteLine(n.Name);
        n.Name = "hi there";
        Console.WriteLine(n.Name);
        var obj = n as ROOTNET.NTObject;
        Console.WriteLine(obj.Name);
    }

我在“n.Name =”行上出现了构建错误 - “属性或索引器ROOTNET.NTObject.Name无法分配给 - 它是只读的” - 简而言之,它缺少了我的子事实 - 与NTNamed对象相关联。因此,我将“override”关键字替换为“new”关键字。现在它将构建,上面的代码正常工作。但是,我认为代码snippit的最后两行不起作用 - 它将调用NTObject的Name getter,而不是NTNamed的getter。

我在stackoverflow中看到过在C#中讨论这个问题的其他问题,但我想,因为我对如何定义getter / setter有非常精细的控制,我可以解决这些问题(例如,参见{ {3}}

有没有一种方法会像我编写上面的代码一样,使用override关键字而不是new关键字?非常感谢!

0 个答案:

没有答案