一般匿名方法
匿 名方法可以使用一般參數類型,就像其他方法一樣。它可以使用在類范圍內定義 的一般類型,例如:
class SomeClass<T>
{
delegate void SomeDelegate(T t);
public void InvokeMethod(T t)
{
SomeDelegate del = delegate(T item){...}
del(t);
}
}
因為委托可以定義一般參數,所以匿 名方法可以使用在委托層定義的一般類型。可以指定用於方法簽名的類型,在這 種情況下,方法簽名必須與其所指派的委托的特定類型相匹配:
class SomeClass
{
delegate void SomeDelegate<T>(T t);
public void InvokeMethod()
{
SomeDelegate<int> del = delegate(int number)
{
MessageBox.Show(number.ToString());
};
del(3);
}
}
匿名方法示例
雖然乍一看 匿名方法的使用可能像一種另類的編程技術,但是我發現它是相當有用的,因為 在只要一個委托就足夠的情況下,使用它就可以不必再創建一個簡單方法。圖 10 展示了一個有用的匿名方法的實際例子 — SafeLabel Windows 窗體控件。
Figure 10The SafeLabel Control
public class SafeLabel : Label
{
delegate void SetString(string text);
delegate string GetString();
override public string Text
{
set
{
if (InvokeRequired)
{
SetString setTextDel = delegate(string text)
{base.Text = text;};
Invoke(setTextDel,new object[] {value});
}
else
base.Text = value;
}
get
{
if (InvokeRequired)
{
GetString getTextDel = delegate(){return base.Text;};
return (string) Invoke(getTextDel,null);
}
else
return base.Text;
}
}
}
圖 10