1

ゲッターのみでプロパティを実装する基本オブジェクトがあります。私のサブクラスでは、両方を実装したいと思います:

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 キーワードを使用して、上記のコードを記述したように動作する方法はありますか? どうもありがとう!

4

0 に答える 0