我正在閱讀一本關於C#的書,它有關於複合賦值的說法(例如+ =, - =,* =,/ =,< < =,>> =):C#複合分配(例如+ =, - =等)「例外」
一個微妙的例外是與事件,我們將在第4章描述:+ =和 - =這裏運營商都經過特殊處理,並映射到該事件的添加和刪除訪問器。
任何人都可以解釋什麼是純英文的含義嗎?我還沒有到第4章。
我正在閱讀一本關於C#的書,它有關於複合賦值的說法(例如+ =, - =,* =,/ =,< < =,>> =):C#複合分配(例如+ =, - =等)「例外」
一個微妙的例外是與事件,我們將在第4章描述:+ =和 - =這裏運營商都經過特殊處理,並映射到該事件的添加和刪除訪問器。
任何人都可以解釋什麼是純英文的含義嗎?我還沒有到第4章。
通常,+=
會將右側的表達式/變量添加到左側的表達式,並將結果分配到左側。
// if a = 4, after this statement, a would be 5
a += 1;
但萬一表達與+=
左手邊是一個事件,那麼這是不是這樣的,但它會在右側的事件處理程序,它被添加到列表該事件的事件處理程序。
// whereas on the below statement someEventHandler is added to the collection of event handlers for the 'OnSomeEvent' event
self.OnSomeEvent += someEventHandler
哦,好的。 :)這是一個重載操作符,當LHS是一個事件時,它具有新的含義。得到它了。謝謝! :) – TimFoolery
它僅僅意味着+ =正在將事件方法附加到例如控制代替加法(例如算術加法)
// += as in arithmetic addition
int i = 3;
i += 1; // i now outputs 4
// += as in programmatically attaching an event to a control
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);
private void btn_Click(object obj) { ... ; }
看到區別?
在C#中有一個委託的概念,它可以指向一個方法。你可以將事件想象成一種特殊類型的代表。你可以使用add
(或remove
)許多方法來處理事件。它允許您在發生特定事件時執行指定的方法。
一個簡單的例子,當您刪除一個顯示控制檯和MessageBox上的刪除結果的文件時。
// This is the delegate. Any instance with DeletedEventHandler type
// can point a method which returns voids and accepts parameters (object,bool)
public delegate void DeletedEventHandler(object sender, bool deleted);
public class FileDeleter
{
private DeletedEventHandler onDelete;
public event DeletedEventHandler OnDelete
{
// The add and remove accessors
add { onDelete += value; }
remove { onDelete -= value; }
}
public void Delete(string filePath)
{
try
{
File.Delete(filePath);
RaiseOnDelete(true);
}
catch
{
RaiseOnDelete(false);
}
}
private void RaiseOnDelete(bool deleted)
{
if (onDelete != null)
onDelete(this, deleted); // all methods added executes here
}
}
public void TestMethod()
{
FileDeleter deleter = new FileDeleter();
// Note that both ShowDeleteInfoWindows and ShowDeleteInfoConsole are in form of void(object,bool) which is compatible with DeletedEventHandler
deleter.OnDelete += new DeletedEventHandler(DeletedOnConsole);
deleter.OnDelete += new DeletedEventHandler(ShowDeleteInfoWindows);
deleter.Delete(@"C:\test.txt");
}
private void ShowDeleteInfoConsole(object deleter, bool isDeleted)
{
Console.WriteLine(isDeleted);
}
private void ShowDeleteInfoWindows(object deleter, bool isDeleted)
{
MessageBox.Show(isDeleted.ToString());
}
這就是它說的。對於['event'](http://msdn.microsoft.com/en-us/library/8627sbea(v = vs.110).aspx),這些操作符的行爲是特殊的 - 他們稱之爲「add」和「remove」方法,分別。 – 2013-02-05 06:04:19
你總是可以跳到第4章,偷看,然後返回到你離開的地方。 *編輯:*等一會兒,它說「我們在第4章中講過」,用過去式。這並不意味着你在*後面的章節?你是否跳過*第4章,或者書中的時態混淆了? ಠ_ಠ – BoltClock
@pst什麼是正在發生的「事件」? – TimFoolery