あーこんな使い方したい場面あったかもーと今更。
とは言え、実装しないようじゃそもそもダメじゃわなw
こういうの関数型言語っぽいって言っていいのかな???
メソッドだけ借りるって感じか。。。
【2011/09/20訂正】
異なるインスタンスのメソッドに委譲しても、thisはあくまでこのインスタンスになってるなぁ。
なんかそのメソッドの設計というか役割ってどうなん?というのもあるような気がして、なんとなくコワイ気がしないでもない。
プロパティzを追加して確認したら、異なるインスタンスのメソッドに委譲すると、thisはあくまでその委譲したインスタンスになってる。
引数で渡してるのを見落としてた(>_<)
そりゃそうじゃわな。そのクラスのスコープというか、アクセシビリティとか考えたら当然と言えば当然。
という感じで、オブジェクト変数と引数の関係とか考えると、これはこれで微妙?
結局は単に”ちゃんと設計する”で解決するんだろうけど。
public class Test { private int x { get; set; } private int y { get; set; } private int z { get; set; } delegate void Calculate(int x, int y); public Test() { this.z = 1; } public static void Main(string[] args) { new Test().Process(); } private void Process() { this.x = 100; this.y = 100; this.z = -1; // "Add : -200", "Subtraction : 0" //(this.zがこのインスタンスの値[-1]) Process(Add); Process(Subtraction); // 異なるインスタンスのメソッドに委譲すると、thisは渡したメソッドのインスタンスになる // "Add : 200", "Subtraction : 0" // (this.zがインスタンスtestの値[1]) Test test = new Test(); Process(test.Add); Process(test.Subtraction); } private void Process(Calculate cal) { cal(this.x, this.y); } private void Calculate(Calculate cal) { cal(this.x, this.y); } private void Add(int x, int y) { System.Diagnostics.Trace.WriteLine("Add : " + ((x + y) * this.z)); } private void Subtraction(int x, int y) { System.Diagnostics.Trace.WriteLine("Subtraction : " + ((x - y) * this.z)); } }