久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

輕松學(xué)習(xí)的有效方法

時(shí)間:2020-12-29 10:50:03 學(xué)習(xí)方法 我要投稿

輕松學(xué)習(xí)的有效方法

  一、靜態(tài)方法和實(shí)例方法

輕松學(xué)習(xí)的有效方法

  靜態(tài)方法是一個(gè)特殊的成員方法,不屬于類的某一個(gè)具體的實(shí)例或?qū)ο,而屬于類本身。靜態(tài)方法不對(duì)特定實(shí)例進(jìn)行操作,只能訪問(wèn)類中的靜態(tài)成員。訪問(wèn)靜態(tài)方法只能使用類名,而不需要?jiǎng)?chuàng)建對(duì)象,也不能使用對(duì)象名類引用,聲明靜態(tài)方法修飾符中必須有static關(guān)鍵字。

  實(shí)例方法可以使用類的任何成員。調(diào)用實(shí)例方法時(shí),必須使用類的實(shí)例或?qū)ο髞?lái)引用。實(shí)例方法對(duì)類的某個(gè)給定的實(shí)例進(jìn)行操作,在實(shí)例方法類中可以使用this來(lái)訪問(wèn)實(shí)例。調(diào)用實(shí)例方法時(shí),必須先創(chuàng)建一個(gè)對(duì)象。

  簡(jiǎn)單的說(shuō),靜態(tài)方法只能訪問(wèn)靜態(tài)成員,實(shí)例方法可以訪問(wèn)靜態(tài)和實(shí)例成員。之所以不允許靜態(tài)方法訪問(wèn)實(shí)例成員變量,是因?yàn)閷?shí)例成員變量是屬于某個(gè)對(duì)象的,而靜態(tài)方法在執(zhí)行時(shí),并不一定存在對(duì)象。同樣,因?yàn)閷?shí)例方法可以訪問(wèn)實(shí)例成員變量,如果允許靜態(tài)方法調(diào)用實(shí)例方法,將間接地允許靜態(tài)方法使用實(shí)例成員變量,這是錯(cuò)誤的;谕瑯拥牡览,靜態(tài)方法中不能使用關(guān)鍵字this。

  例一、編程使用靜態(tài)方法和實(shí)例方法

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { class A { int exaVar;//創(chuàng)建的一個(gè)為實(shí)例成員變量 static int stVar;//創(chuàng)建的一個(gè)靜態(tài)成員變量 void tM()//實(shí)例方法 { exaVar = 1;//等價(jià)于this.exVar=1 stVar = 1;//等價(jià)于A.stVar=1 } static void sM()//靜態(tài)方法 { //exaVar = 1;//錯(cuò)誤,靜態(tài)方法不可以調(diào)用實(shí)例成員變量 stVar = 1;//等價(jià)于A.stVar=1 } static void Main(string[] args) { A text = new A();//創(chuàng)建類A的對(duì)象為text text.exaVar = 1;//對(duì)象text訪問(wèn)實(shí)例成員變量 A.stVar = 1;//只能使用類訪問(wèn)靜態(tài)成員變量 //text.stVar = 1;//不能使用對(duì)象text訪問(wèn)靜態(tài)成員變量 text.tM();//使用對(duì)象text訪問(wèn)實(shí)例成員方法 //text.sM();//不能使用對(duì)象text訪問(wèn)靜態(tài)成員方法 A.sM();//使用類訪問(wèn)靜態(tài)成員方法 Console.WriteLine(text.exaVar + A.stVar); Console.ReadLine(); } } }

  輸出的結(jié)果為:2

  二、虛方法和非虛方法

  若一個(gè)實(shí)例方法的聲明中含有virtual修飾符,則稱該方法為虛方法。若其中沒(méi)有virtual修飾符,則稱該方法為非虛方法。

  非虛方法的實(shí)現(xiàn)是一成不變的,無(wú)論該方法是在聲明它的類的實(shí)例上調(diào)用還是在派生類的實(shí)例上調(diào)用,實(shí)現(xiàn)均相同。與此相反,虛方法的實(shí)現(xiàn)可以由派生類取代。取代所繼承的虛方法的實(shí)現(xiàn)的過(guò)程稱為重寫(xiě)該方法。在虛方法調(diào)用中,該調(diào)用所涉及的那個(gè)實(shí)例運(yùn)行時(shí)類型確定了要被調(diào)用的究竟是該方法的哪一種實(shí)現(xiàn)。在非虛方法調(diào)用中,相關(guān)的實(shí)例的編譯時(shí)類型是決定性因素。

  例二、使用虛方法和非虛方法在派生類中調(diào)用

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { public class A { public virtual void ab()//定義的類A的虛方法 [csharp] view plaincopyprint? { Console.WriteLine("這是虛方法"); } public void ac()//定義的類A的非虛方法 { Console.WriteLine("這是非虛方法"); } } public class B:A//類B私有繼承類A { public override void ab()//重寫(xiě)繼承的ab方法 { Console.WriteLine("這是新的方法"); } public new void ac()//創(chuàng)建一個(gè)新的方法覆蓋原來(lái)的ac方法 { Console.WriteLine("這是另一個(gè)新的方法"); } } class Program { static void Main(string[] args) { B b = new B();//創(chuàng)建類B的對(duì)象b A a = b;//將對(duì)象b賦值給類A的對(duì)象a a.ab();//調(diào)用原ab虛方法 b.ab();//調(diào)用ab方法 a.ac();//調(diào)用原ac非虛方法 b.ac();//調(diào)用ac方法 Console.ReadLine(); } } }

  從輸出的結(jié)果中可以看出虛方法的實(shí)現(xiàn)是由派生類取代并且由它的方法實(shí)現(xiàn),而非虛方法的實(shí)現(xiàn)是定義的類和派生類的各自由它們的方法實(shí)現(xiàn)。

  三、虛方法和重寫(xiě)方法

  重寫(xiě)方法用相同的簽名重寫(xiě)所繼承的虛方法。虛方法聲明用于引入新方法,而重寫(xiě)方法聲明則用于使現(xiàn)有的繼承虛方法專用化。用override聲明所重寫(xiě)的那個(gè)方法稱為已重寫(xiě)了的基方法。

  重寫(xiě)聲明和已重寫(xiě)了的基方法具有相同的聲明可訪問(wèn)性。換句話說(shuō),重寫(xiě)聲明不能更改所對(duì)應(yīng)的 虛方法的可訪問(wèn)性。但是,如果已重寫(xiě)的基方法是protected,并且聲明它的程序集不是包含重寫(xiě)方法的程序集,則重寫(xiě)方法聲明的可訪問(wèn)性必須是protected。

  重寫(xiě)override一般用于接口的實(shí)現(xiàn)和繼承類的方法改寫(xiě)時(shí)應(yīng)注意:

  (1)覆蓋的方法的標(biāo)志要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果

  (2)覆蓋的方法的返回值必須和被覆蓋的方法的返回值一致

  (3)覆蓋的方法所拋出的異常必須和被覆蓋的方法所拋出的異常一致,或者是其子類

  (4)被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋

  例三、創(chuàng)建一個(gè)虛方法并重寫(xiě)這個(gè)虛方法,通過(guò)調(diào)用兩個(gè)方法比較結(jié)果

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { class A { public virtual void a()//創(chuàng)建的虛方法 { Console.WriteLine("這是虛方法"); } } class B : A { public override void a() { Console.WriteLine("這是重寫(xiě)后的`方法"); } } class Program { static void Main(string[] args) { B b1 = new B();//創(chuàng)建類B的對(duì)象b1 b1.a();//調(diào)用重寫(xiě)后的a方法 A a1 = new A();//創(chuàng)建類A的對(duì)象a1 a1.a();//調(diào)用虛方法a A a2 = b1;//將類B的對(duì)象b1賦值給類A的對(duì)象a2 a2.a();//調(diào)用虛方法a Console.ReadLine(); } } }

  輸出的結(jié)果為:這是重寫(xiě)后的方法

  這是虛方法

  這是重寫(xiě)后的方法

  四、外部方法(這個(gè)方法很新奇,聯(lián)想到很多)

  當(dāng)方法聲明包含extern修飾符時(shí),稱該方法為外部方法。外部方法是在外部實(shí)現(xiàn)的,編程語(yǔ)言通常是使用C#以外的語(yǔ)言。外部方法不可以是泛型。

  extern修飾符通常與DllImport屬性一起使用,從而使外部方法可以由DLL(動(dòng)態(tài)鏈接庫(kù))實(shí)現(xiàn)。執(zhí)行環(huán)境可以支持其他用來(lái)提供外部方法實(shí)現(xiàn)的機(jī)制。當(dāng)外部方法包含DllImport屬性時(shí),該方法聲明必須同時(shí)包含一個(gè)static修飾符。

  在使用DLLImport屬性時(shí),一定要引入System.Runtime.InteropServices命名空間,此命名空間是提供各種各樣支持COM interop及平臺(tái)調(diào)用服務(wù)的成員。

  例四、通過(guò)外部方法和Dlllmport屬性調(diào)用“User32.dll”實(shí)例自定義信息提示框的功能

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices;//必須引入的命名空間 namespace Text { class Program { [DllImport("User32.dll")]//調(diào)用User32.dll public static extern int MessageBox(int H, string m, string c, int type);//定義的外部方法 static int Main(string[] args) { Console.Write("請(qǐng)輸入信息:"); string str = Console.ReadLine();//接受輸入的信息 return MessageBox(0,str,"我的信息提示框",0);//以信息提示框輸出 } } }

  五、分部方法

  若一個(gè)方法聲明中含有partial修飾符,則稱該方法為分部方法。只能講分部方法聲明為分部類型的成員,而且要遵守約束數(shù)目。分部方法有著嚴(yán)格的限制。分部方法必須在分部類或分部機(jī)構(gòu)內(nèi)聲明。它們必須是私有的,不能返回值,不能有輸出參數(shù)。因?yàn)槿魏吾槍?duì)沒(méi)有被實(shí)現(xiàn)的分部方法的調(diào)用都會(huì)簡(jiǎn)單地被忽略,所以說(shuō)這些限制是非常有必要的。

  分部方法不能作為一個(gè)明確分配的變量,僅被代碼生成器在處理輕量級(jí)事件的時(shí)候使用。假設(shè)用戶解析一個(gè)數(shù)據(jù)庫(kù)或者一個(gè)XML文件,然后生成了數(shù)據(jù)類,結(jié)果會(huì)發(fā)現(xiàn)有數(shù)十個(gè)類,幾百個(gè)屬性以及一大堆泛型和模板文件等。分部方法另外一個(gè)經(jīng)常被用到的地方是驗(yàn)證,或者讓屬性的setter去更新另一個(gè)屬性。所以如果用戶要使用產(chǎn)生的代碼,或者在運(yùn)行時(shí)有幾百個(gè)事件和千個(gè)方法調(diào)用的話(其實(shí)大多數(shù)情況下只用到了其中的一點(diǎn)點(diǎn)),就可以選擇分部方法。分部方法在聲明和使用時(shí)要比事件容易得多,如果沒(méi)有用到它們,它們就會(huì)消失。從分部方法必須是私有的限制中,

  Alexander發(fā)現(xiàn)了該方法的不足之處,即如果用戶喜歡原數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用,并且已經(jīng)被ASP.NET的數(shù)據(jù)綁定所困擾時(shí)(因?yàn)闆](méi)有其他的方法可以附上原數(shù)據(jù)),那么,將來(lái)會(huì)出現(xiàn)丟失信息的可能。

  例五、創(chuàng)建一個(gè)類的分部方法并且在另一個(gè)部分中引用

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { public partial class Program//定義的分部類 { private int _setup;//定義的字段 public int setup//定義的方法 { set { _setup=value; } get { return _setup; } } partial void text(int t);//聲明分部方法 partial void text(int t)//實(shí)現(xiàn)聲明 { t += _setup; Console.Write(t); } } partial class Program { static void Main(string[] args) { Program pg = new Program();//創(chuàng)建類對(duì)象 pg._setup = 100;//設(shè)置屬性 pg.text(50);//調(diào)用方法 Console.ReadLine(); } } }

  輸出的結(jié)果為:150

【輕松學(xué)習(xí)的有效方法】相關(guān)文章:

輕松去屑有效的方法10-10

學(xué)法讓學(xué)習(xí)輕松有效教育論文11-02

有效學(xué)習(xí)古箏的方法10-08

化學(xué)有效的學(xué)習(xí)方法10-26

有效的學(xué)習(xí)法語(yǔ)的方法11-06

學(xué)習(xí)跆拳道的有效方法10-02

兒童英語(yǔ)學(xué)習(xí)有效方法10-10

各階段學(xué)習(xí)數(shù)學(xué)的有效方法建議10-27

最有效果的英語(yǔ)學(xué)習(xí)方法08-15

少兒英語(yǔ)學(xué)習(xí)的有效方法推薦08-21