0

プロパティを設定または取得する前に、コンパイル時にわからないメソッドを実行する必要がありますか? メソッドをランタイムとして追加することは可能ですか?

public string MyName 
{
    get 
    { 
        //A Methode should called here
        return m_ASD; 
    }
    set 
    { 
        //A Methode should called here
        m_ASD = value; 
    }
}
4

1 に答える 1

5

最も簡単な解決策は、実行時に設定できるフックを提供することです。

public Action OnMyNameSet { get; set; }
public Action OnMyNameGet { get; set; }
public string MyName
{
    get
    {
        if (OnMyNameGet != null) { OnMyNameGet(); }
        return m_ASD;
    }
    set
    {
        if (OnMyNameSet != null) { OnMyNameSet(); }
        m_ASD = value;
    }
}

使用法:

MyClass c = new MyClass();
c.OnMyNameSet = NameOfSomeMethod;
c.MyName = ...;                   // also executes NameOfSomeMethod();

または、コンシューマーがアタッチできるイベントを作成することもできます。これは、フックが通常 .NET フレームワークに実装される方法です。

public event EventHandler OnMyNameSet;
public event EventHandler OnMyNameGet;
public string MyName
{
    get
    {
        if (OnMyNameGet != null) { OnMyNameGet(this, EventArgs.Empty); }
        return m_ASD;
    }
    set
    {
        if (OnMyNameSet != null) { OnMyNameSet(this, EventArgs.Empty); }
        m_ASD = value;
    }
}

使い方は似ています。ただし、 の+=代わりに を使用することに注意して=ください。

MyClass c = new MyClass();
c.OnMyNameSet += NameOfSomeMethod;
c.MyName = ...;                   // also executes NameOfSomeMethod(sender, eventArgs);
于 2013-06-26T12:00:33.877 に答える