C#基础(Day08)
今天學的主要是委托,事件,和一些類還有接口。
先來看委托,首先要說委托是一種類型,它可以把方法包裝成一個類型進行傳遞。委托在引用方法時只要方法的簽名與委托簽名相匹配就行了,它并不認修飾符。
委托類型派生自.NET Frameword中的Delegate類。委托類型是密封的。
namespace 委托
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? Greeting gt = new Greeting();
?????
???????????? gt.MD+= gt.English;
??????????? gt.GreetPeopre("tom");
??????????? gt.MD -= gt.English;
??????????? gt.MD += gt.Chinese;
??????????? gt.GreetPeopre("張三");
??????????? Console.ReadLine();
??????? }
??? }
??? class Greeting
??? {
??????? public MyDelegate MD;
??????? public void GreetPeopre(string name)
??????? {
??????????? MD(name);
??????? }
???????
??????? public void English(string name)
??????? {
??????????? Console.WriteLine("Hello,"+name);
??????? }
??????? public void Chinese(string name)
??????? {
??????????? Console.WriteLine("早上好,"+name);
??????? }
??? }
??? public delegate void MyDelegate(string s);
}
委托中還有兩個名詞:委托的協變,委托的逆變。
委托的協變是允許方法的返回類型要比委托的返回類型范圍小。因為傳遞返回值時,是將方法的返回值傳遞給委托,所以委托的返回值類型表示的范圍要比方法的類型要廣,以接收方法傳遞過來的返回值。
委托的逆變:它是允許方法的參數類型比委托的參數表示的范圍要大。因為在參數傳遞時,是通過委托將參數傳遞給方法,為了接收從委托傳遞過來的參數,方法的參數類型表示的范圍要比委托的廣。
其實協逆變都是把子類型賦值于父類型的過程。協變時委托的返回值類型是父類型,逆變時委托的返回值類型是子類型。
說到了委托就不得不說說事件了。其實聲明一個事件不過類似于聲明一個進行了封裝的委托類型的變量而已。
定義事件可以分為五步:
1.定義委托
2.定義事件
3.定義方法
4.事件訂閱方法
5.調用事件
?class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? Program p = new Program();
??????????? //事件訂閱方法
??????????? p.MyEve+=new MyDel(MyMethod);
??????????? //調用事件
??????????? p.MyEve();
??????? }
???????
??????? //定義方法
??????? static void MyMethod()
??????? {
??????????? Console.WriteLine("我的方法");
??????? }
??????? //定義事件
??????? event MyDel MyEve;
??? }
??? //定義委托
??? delegate void MyDel();
看完了委托和事件,我們再來說說幾個類。
密封類:密封類不能用做基類,但它可以繼承其它類(但它不可以繼承靜態類),關鍵字sealed
靜態類:靜態類既不可以被繼承,也不可以繼承其它類。所以靜態方法可以被重載,但不能被重寫。靜態類中僅包含靜態成員,因此它們不能被實例化。在這里,說一下代理不可以是靜態的,但事件可以是靜態的。關鍵字static
抽象類:與靜態類相同,抽象類也不能實例化。抽象類中既可以有抽象成員也可以有非抽象成員。當有實例化類繼承它時,子類必須通過override實現抽象類中的抽象成員。事件,方法,屬性,索引器都可以是抽象的。關鍵字abstract。
最后有接口,接口好像也沒什么說的,總結來說,接口中的所有成員都不能有實現,接口也不能直接實例化,接口中可以包含事件,屬性,方法,索引器,接口不能繼承類,只能繼承接口。接口是可以多繼承的,這點與類不同
轉載于:https://blog.51cto.com/kxvivian/620494
總結
以上是生活随笔為你收集整理的C#基础(Day08)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多数据库支持的应用程序设计(来自深空老大
- 下一篇: Can't connect to MyS