委託(delegate), 已經在前文 UDP Server (二)、SerialPort Class 擴充 (二) 中使用。
在此做一個簡明的說明,作為助憶。
以 JgeComport Class 該文為例
1. 宣告一個委託的格式(模板) : 委託(delegate)必須有一個簽章,以下簽章使用事件(event)專有格式(並非必要)
public delegate void jgecomEventHandler(object sender, jgecomEventArgs e);
public event jgecomEventHandler Received;
if (Received != null) //. 當事件變數不為 null 則執行之4. 依據委託格式(模板),建立方法。若為事件,則稱為 event 處理器
{
omEventArgs e = new jgecomEventArgs(msg, commName);
Received(this, e);
}
private void onReceived(object sender, jgecomEventArgs e)
{
switch (e.NAME.ToString())
{
case "COM2":
Byte[] bytes = new Byte[1024];
bytes = JgeComport.StreamToBytes(e.MSG);
string ss = System.Text.Encoding.ASCII.GetString(bytes);
textBox1.AppendText(ss + Environment.NewLine);
textBox1.Text += String.Format("{0}{1}", BitConverter.ToString(bytes), Environment.NewLine); //Environment.NewLine => \r\n
label2.Text = bytes.Length.ToString();
break;
default:
break;
}
}
MyJgeComport.Received += this.onReceived;
jgecomEventHandler jHandler = new jgecomEventHandler( this.onReceived; );
public void DoEventHandler(jgecomEventHandler jeh, object sender, jgecomEventArgs e )
{
MessageBox.Show( e.ToString() );
}
DoEventHandler( this.onReceived, this , new jgecomEventArgs(msg, commName) );
public Object Invoke (
Delegate method,
params Object[] args
)
- method
方法的委派,採用和 args 參數中包含者相同的數字和型別的參數。
- args
做為引數傳遞至指定方法的物件陣列。如果方法沒有引數,這個參數可能是 Null 參照 (即 Visual Basic 中的 Nothing)。