我有一個簡單的程序,其行爲不像我預期的那樣行爲。我的印象是,這兩個方法簽名會在委託的調用列表的順序CallEvent()方法的過程中運行,使測試屬性等同於40.因此:關於C#委託/事件處理
Test += (20+15);
Test += (20-15);
Test == 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(...)' –