私はそれが動作すると予想されるように動作しない単純なプログラムを持っています。それが判明れるようC#デリゲート/イベント処理について
Test += (20+15);
Test += (20-15);
Test == 40;
:私は、両方のメソッドシグネチャがCallEvent()メソッドの間の委任の呼び出しリストの順に実行し、作るテストプロパティをそこで40に等しくなりという印象の下にありましたこの割り当ては、減算の値である5に等しくなります。それが最初に加算を行い、それを減算に置き換えたとしても、Test + =代入の目的を無効にしませんか?たぶんそれは一緒に追加をバイパスしています(しかし、そうは考えにくい)。私は、私の現在のプログラミング知識では見えない、より固有のことが起こっていると思う。
お願いしていただきありがとうございます! LiquidWotter
//MY NAMESPACE
namespace MyNamespace
{
//MAIN
private static void Main(string[] args)
{
//CREATE MY OBJECT
MyClass MyObject = new MyClass();
//ADD CALLS TO EVENT
MyObject.MyEvent += Add;
MyObject.MyEvent += Sub;
//CALL EVENT AND WRITE
MyObject.CallEvent(20, 15);
Console.WriteLine(MyObject.Test.ToString());
//PAUSE
Console.ReadLine();
}
//ADDITION
private static int Add(int x, int y)
{ return x + y; }
//SUBTRACTION
private static int Sub(int x, int y)
{ return x - y; }
//MY CLASS
public class MyClass
{
//MEMBERS
public delegate int MyDelegate(int x, int y);
public event MyDelegate MyEvent;
public int Test { get; set; }
//CONSTRUCTOR
public MyClass()
{
this.Test = 0;
}
//CALL Event
public void CallEvent(int x, int y)
{
Test += MyEvent(x, y);
}
}
}
実際にイベントが使用されることはありません。デリゲートを格納する場合は、デリゲートを変数に格納します。それはイベントの役割ではありません。 –
あなたは、すべてのイベントが 'void f(...) 'であるべき理由(ガイドライン)を見つけました。 –