我有一个基础对象,它实现了一个只有 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”关键字。现在它将构建,并且上面的代码可以正常工作。但是,我认为代码片段的最后两行不起作用——它将调用 NTObject 的 Name getter,而不是 NTNamed 的 getter。
我在 stackoverflow 中看到了其他关于 C# 中这个问题的问题,但我认为,因为我对如何定义 getter/setter 有非常精细的控制,所以我可以解决这些问题(例如,参见C# Setter for an抽象吸气剂。
有没有一种方法可以像我编写上面的代码一样使用 override 关键字,而不是 new 关键字?非常感谢!