面试:1.C#中的委托是什么?事件是一种委托吗?
問題來(lái)源:https://blog.csdn.net/qq_33575542/article/details/82805857#%E4%BB%80%E4%B9%88%E6%98%AF%E5%8D%8F%E5%90%8C%E7%A8%8B%E5%BA%8F%EF%BC%9F
?
1.C#中的委托是什么?事件是一種委托嗎?
1.1什么是委托
委托是一種定義方法簽名的類型 、
委托是一種在對(duì)象里保存方法引用的類型,同時(shí)也是一種類型安全的函數(shù)指針。
事件是多播委托的一個(gè)特例,事件是一個(gè)特殊的多路廣播委托。
C#中的委托可以理解為函數(shù)的包裝。使用委托使程序員可以將 方法引用 封裝在委托對(duì)象內(nèi)。然后調(diào)用該委托對(duì)象就可以執(zhí)行委托對(duì)象內(nèi)方法引用指向方法,而不必在編譯時(shí)知道將調(diào)用那個(gè)方法(如參數(shù)為委托類型方法,也就是提供了為程序回調(diào)指定方法的機(jī)制)
1.2委托包裝方法限制
a.方法的簽名必須與委托一致。方法簽名包括參數(shù)的個(gè)數(shù)、類型和順序;b.方法的返回類型要和委托一致。(方法的返回類型不屬于方法簽名的一部分)
1.3委托的使用
A..定義委托類型:delegete void MyDelegate(int para1,int para2);
B.聲明委托變量:MyDelegate d;(既然委托是一種類型,那么可以使用委托來(lái)聲明一個(gè)委托變量,相當(dāng)于int a)
C.實(shí)例化委托:d=new MyDelegate(new Program().Add);(委托的實(shí)例化是用一個(gè)方法明作為參數(shù),該方法的方法簽名和返回類型必須符合委托的定義)
D.作為參數(shù)傳遞給方法:MyMethod(d);(委托使得在C#中,可以把一個(gè)方法作為另一個(gè)方法的參數(shù),而委托可以看作一個(gè)包裝方法的對(duì)象)
E.在方法中調(diào)用委托:mydelegate(1,2);
1.4為什么要引入委托
引入委托之后,就可以把函數(shù)作為參數(shù)傳遞給另一個(gè)方法了;委托可以提高方法擴(kuò)展性。
1.5委托鏈(多路廣播委托)
?
事件
事件的使用:
Public:因?yàn)槭录挠嗛喺咝枰獙?duì)事件進(jìn)行訂閱與取消操作,定義為公共類型可使事件對(duì)其他類可見;
委托類型可自定義,也可使用.NET類庫(kù)中預(yù)定義的委托類型EventtHanler
Public delegate void EventHandler(Object sender,EventArgs e);
總結(jié)
以上是生活随笔為你收集整理的面试:1.C#中的委托是什么?事件是一种委托吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VBA全局变量
- 下一篇: C# WinForm窗体程序、如何实现像