這是幾個簡單的例子,但是實際的開發中委托還還只在反射時用到過,事件的話只自己做了一次,並且還是特意去用的 ,實際上可以不用。線程的話,因為需要,所以用的會多點,這裡主要是WS上的線程。 委托 在前面的反射實例中,也有用到委托執行方法。 這個例子是將一個方法或者委托實例作為另外一個函數的入參傳遞。 至 ...
這是幾個簡單的例子,但是實際的開發中委托還還只在反射時用到過,事件的話只自己做了一次,並且還是特意去用的 ,實際上可以不用。線程的話,因為需要,所以用的會多點,這裡主要是WS上的線程。
委托
在前面的反射實例中,也有用到委托執行方法。
這個例子是將一個方法或者委托實例作為另外一個函數的入參傳遞。
至於有什麼用,我現在還沒用上。
private delegate void Dosth(string s);//定義委托 無返回值 一個string參數 private void button2_Click_1(object sender, EventArgs e) { Dosth dosth = new Dosth(Func);//實例化委托, DoMain(dosth);//DoMain(Func) 調用函數方法DoMain,入參可以是對應的方法Func也可以是委托實例化的後的dosth } private void Func(string s) { MessageBox.Show(s); } private void DoMain(Dosth fun) //方法DoMain 入參接收一個委托實例或者函數:返回值是空,入參是一個string { fun("hello world!"); }
事件
事件使用發佈-訂閱模型,事件在類中申明且生成,通過使用同一個類或者其他類中的委托與事件處理程式關聯。
包含事件的類用於發佈事件,被稱為發佈器,其他接收該事件的類稱為訂閱器。
發佈器中描述的是怎麼調用事件,也就是觸發事件,訂閱器中實際是事件具體的執行,最終要做什麼在訂閱器中完成。
這是一個實例。
發佈器類
發佈事件,定義觸發事件執行的邏輯的設定。
public class Publish { private int value; public delegate void MyDelegate(string s);//申明委托 public event MyDelegate MyEvent;//基於申明的委托定義事件 public Publish() { value = 3; } public void CompairValue(int n) { if (n == value)//滿足條件 { OnValueChanged(); } } protected void OnValueChanged() { if (MyEvent != null) { MyEvent("hello world!");//觸發訂閱器中的方法執行 } } }
訂閱器類
被觸發時,做該做的事。
public class Subscribe { public void ShowMessage(string s) { MessageBox.Show(s);//事件觸發,訂閱器中執行指定操作,更多的的操作可以在這個類中完成 } }
觸發器
private void button3_Click(object sender, EventArgs e) { Publish pub = new Publish(); Subscribe sub = new Subscribe(); pub.MyEvent += sub.ShowMessage;//或者new Publish.MyDelegate(sub.ShowMessage); 把訂閱器中的方法綁定到事件上,也就是註冊發佈器中的事件 pub.CompairValue(3);//當入參為3時,觸發事件,訂閱器中的方法則執行 }
線程
這裡的線程是WS上的線程
public void DoMain(){
static object ThreadLock = new object(); public static Thread thread; lock (ThreadLock) { try { Boolean ThreadIsExit = thread.IsAlive;//如果報錯說明線程不存在 if (!ThreadIsExit) { thread.Start(); } } catch {try { thread = new Thread(new ThreadStart(Dosth));//開啟一個線程,回調函數Dosth thread.IsBackground = true;//設置線程為後臺線程 thread.Start(); } catch (Exception ex) { } finally { } } finally { } }
}
public void Dosth(){
}