我有一个基础对象,它实现了一个只有一个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关键字?非常感谢!