私は宣言クラスの外側から部分的メソッドを呼び出したいです。部分的なメソッドは暗黙的にプライベートであるため、これは許可されていません。あなたはので、私は次のことを提案しています部分を指すようにデリゲートを設定することはできません。C#の:部分的な方法とアクション、非実装体
public partial class MyClass {
AnotherClass _anotherClass;
public MyClass () {
_anotherClass = new AnotherClass();
_anotherClass.Method = new Action(() => {
this.Method();
});
}
partial void Method();
//sometimes this method will be implemented
//partial void Method() {
//do something
//}
}
public class AnotherClass {
public Action Method { get; set;}
public void SomeOtherMethod(){
this.Method();
}
}
クラスが密結合されている、彼らは親子関係にあります。私は、親が、子のプロパティの変更について知るためにオーバーライドできるメソッドを持つことを望みます。私はイベントハンドラを各子供に付けることができましたが、子供はすでにその親について知っていますので、子供に直接親に知らせることは、行く方法のように思えます。 の親がを気にしない場合を除いて、私は気にしていれば部分的に実装できるようにしたいのです。この質問は基本的にプログラミングとパフォーマンスの容易さに関するものです。上記のような実装では、すべての部分的なメソッドを生成して、私が気にしている部分のみを実装することができます。
私の質問は、部分的な方法Method()
が実装されていないことを倍にも関します。 Actionメソッドが呼び出されると、コンパイラはボディが空であるため、それを最適化しますか?私がこれらのアクションコールのヒープを取得した場合、私はパフォーマンスのペナルティを受けることができますか?同じ機能を使用するより良い方法はありますか?
あなたは空のアクションはかなり安い操作で呼び出して、顕著なパフォーマンスヒットを取得するつもりはありません。私は、コンパイラがvoid Actionを取り除くことは疑う。 –
私はpeopeがabotuのパフォーマンスを話す理由を知りません。それが問題の場合... MEASURE IT;) –