ゲッターのみでプロパティを実装する基本オブジェクトがあります。私のサブクラスでは、両方を実装したいと思います:
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」キーワードに置き換えます。これでビルドされ、上記のコードが正しく機能します。ただし、コード スニピットの最後の 2 行は機能しないと思います。NTNamed のゲッターではなく、NTObject の Name ゲッターを呼び出します。
C# でこの問題について話している他の質問を stackoverflow で見たことがありますが、これらの問題を回避できるゲッター/セッターを定義する方法を非常にきめ細かく制御できるため、私は考えました (たとえば、C# セッターを参照してください)。抽象ゲッター。
new キーワードではなく override キーワードを使用して、上記のコードを記述したように動作する方法はありますか? どうもありがとう!