輕松進修C#的辦法。本站提示廣大學習愛好者:(輕松進修C#的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是輕松進修C#的辦法正文
在類中自界說的“函數”稱為“辦法”,因為C#是完整面向對象的說話,同時為了便於說明前面要學的C#類,這裡的“辦法”來稱謂“函數”。
辦法是一種用於完成可以有對象或類履行的盤算機或操作的成員,是一個已定名的語句集。每一個辦法都有一個稱號和主體。辦法名應當是一個成心義的標識符,應描寫出辦法的用處。辦法主體包括了挪用辦法時現實履行的語句。用戶可認為年夜多半辦法供給一些數據來停止處置,並讓其前往一些信息(平日是處置成果)。辦法是一種根本的,功效壯大的編程機制。
辦法的聲明格局為:
潤飾符 前往值類型 辦法稱號(參數列表)
{
辦法體
}
個中的潤飾符和參數列表都是可選的,潤飾符以下:new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern,partial
假如以下一切前提都為真,則所述的聲明就具有一個有用的潤飾符組合:
(1)該聲明包括一個由拜訪潤飾符構成的有用組合
(2)該聲明中所含的潤飾符沒有彼此雷同的
(3)該聲明最多包括以下潤飾符中的一個:static,virtual和override
(4)該聲明最多包括以下潤飾符中的一個:new和override
(5)假如聲明中包括abstract潤飾符,則該聲明不包括以下任何潤飾符:static,virtual,sealed或extern
(6)假如聲明中包括private潤飾符,則該聲明不包括以下任何潤飾符:virtual,override或abstract
(7)假如聲明包括sealed潤飾符,則該聲明還包括override潤飾符
(8)假如聲明中包括partial潤飾符,則該聲明不包括以下任一潤飾符:new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern
前往值類型是一個類型名,它指定了前往的信息是甚麼類型。這可所以任何類型,假如要前往值,則在辦法體運轉後必需由return語句前往一個和“前往值類型”雷同類型的值,假如要寫一個不前往值的辦法,那末必需用症結字void來代替前往類型。假如聲明包括partial潤飾符,則前往類型必需為void。
一個辦法的稱號必需分歧於在一個類中聲明的一切其他非辦法的稱號。另外,必需分歧於在統一類中聲明的一切其他辦法的簽名。在寫參數列表時,一切形參和類型形參都不克不及同名。
上面編寫一個簡略的前往兩個整型數的和的辦法:
public int add(int a, int b) { return a+b; }
上面就詳細引見C#說話中的一些主要的基本的辦法:
1、靜態辦法和實例辦法
靜態辦法是一個特別的成員辦法,不屬於類的某一個詳細的實例或對象,而屬於類自己。靜態辦法纰謬特定實例停止操作,只能拜訪類中的靜態成員。拜訪靜態辦法只能應用類名,而不須要創立對象,也不克不及應用對象名類援用,聲明靜態辦法潤飾符中必需有static症結字。
實例辦法可使用類的任何成員。挪用實例辦法時,必需應用類的實例或對象來援用。實例辦法對類的某個給定的實例停止操作,在實例辦法類中可使用this來拜訪實例。挪用實例辦法時,必需先創立一個對象。
簡略的說,靜態辦法只能拜訪靜態成員,實例辦法可以拜訪靜態和實例成員。之所以不許可靜態辦法拜訪實例成員變量,是由於實例成員變量是屬於某個對象的,而靜態辦法在履行時,其實不必定存在對象。異樣,由於實例辦法可以拜訪實例成員變量,假如許可靜態辦法挪用實例辦法,將直接地許可靜態辦法應用實例成員變量,這是毛病的。基於異樣的事理,靜態辦法中不克不及應用症結字this。
例1、編程應用靜態辦法和實例辦法
<span >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { class A { int exaVar;//創立的一個為實例成員變量 static int stVar;//創立的一個靜態成員變量 void tM()//實例辦法 { exaVar = 1;//等價於this.exVar=1 stVar = 1;//等價於A.stVar=1 } static void sM()//靜態辦法 { //exaVar = 1;//毛病,靜態辦法弗成以挪用實例成員變量 stVar = 1;//等價於A.stVar=1 } static void Main(string[] args) { A text = new A();//創立類A的對象為text text.exaVar = 1;//對象text拜訪實例成員變量 A.stVar = 1;//只能應用類拜訪靜態成員變量 //text.stVar = 1;//不克不及應用對象text拜訪靜態成員變量 text.tM();//應用對象text拜訪實例成員辦法 //text.sM();//不克不及應用對象text拜訪靜態成員辦法 A.sM();//應用類拜訪靜態成員辦法 Console.WriteLine(text.exaVar + A.stVar); Console.ReadLine(); } } }</span>
輸入的成果為:2
2、虛辦法和非虛辦法
若一個實例辦法的聲明中含有virtual潤飾符,則稱該辦法為虛辦法。若個中沒有virtual潤飾符,則稱該辦法為非虛辦法。
非虛辦法的完成是原封不動的,不管該辦法是在聲明它的類的實例上挪用照樣在派生類的實例上挪用,完成均雷同。與此相反,虛辦法的完成可以由派生類代替。代替所繼續的虛辦法的完成的進程稱為重寫該辦法。在虛辦法挪用中,該挪用所觸及的誰人實例運轉時類型肯定了要被挪用的畢竟是該辦法的哪種完成。在非虛辦法挪用中,相干的實例的編譯時類型是決議性身分。
例2、應用虛辦法和非虛辦法在派生類中挪用
<span >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的虛辦法 </span> [csharp] view plaincopyprint? <span > { Console.WriteLine("這是虛辦法"); } public void ac()//界說的類A的非虛辦法 { Console.WriteLine("這長短虛辦法"); } } public class B:A//類B公有繼續類A { public override void ab()//重寫繼續的ab辦法 </span> <span > { Console.WriteLine("這是新的辦法"); } public new void ac()//創立一個新的辦法籠罩本來的ac辦法 { Console.WriteLine("這是另外一個新的辦法"); } } class Program { static void Main(string[] args) { B b = new B();//創立類B的對象b A a = b;//將對象b賦值給類A的對象a a.ab();//挪用原ab虛辦法 b.ab();//挪用ab辦法 a.ac();//挪用原ac非虛辦法 b.ac();//挪用ac辦法 Console.ReadLine(); } } }</span>
輸入的成果為:
從輸入的成果中可以看出虛辦法的完成是由派生類代替而且由它的辦法完成,而非虛辦法的完成是界說的類和派生類的各自在它們的辦法完成。
3、虛辦法和重寫辦法
重寫辦法用雷同的簽名重寫所繼續的虛辦法。虛辦法聲明用於引入新辦法,而重寫辦法聲明則用於使現有的繼續虛辦法公用化。用override聲明所重寫的誰人辦法稱為已重寫了的基辦法。
重寫聲明和已重寫了的基辦法具有雷同的聲明可拜訪性。換句話說,重寫聲明不克不及更改所對應的 虛辦法的可拜訪性。然則,假如已重寫的基辦法是protected,而且聲明它的法式集不是包括重寫辦法的法式集,則重寫辦法聲明的可拜訪性必需是protected。
重寫override普通用於接口的完成和繼續類的辦法改寫時應留意:
(1)籠罩的辦法的標記要和被籠罩的辦法的標記完整婚配,能力到達籠罩的後果
(2)籠罩的辦法的前往值必需和被籠罩的辦法的前往值分歧
(3)籠罩的辦法所拋出的異常必需和被籠罩的辦法所拋出的異常分歧,或許是其子類
(4)被籠罩的辦法不克不及為private,不然在其子類中只是新界說了一個辦法,並沒有對其停止籠罩
例3、創立一個虛辦法偏重寫這個虛辦法,經由過程挪用兩個辦法比擬成果
<span >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Text { class A { public virtual void a()//創立的虛辦法 { Console.WriteLine("這是虛辦法"); } } class B : A { public override void a() { Console.WriteLine("這是重寫後的辦法"); </span> } } <span >class Program { static void Main(string[] args) { B b1 = new B();//創立類B的對象b1 b1.a();//挪用重寫後的a辦法 A a1 = new A();//創立類A的對象a1 a1.a();//挪用虛辦法a A a2 = b1;//將類B的對象b1賦值給類A的對象a2 a2.a();//挪用虛辦法a Console.ReadLine(); } } } </span>
輸入的成果為:這是重寫後的辦法
這是虛辦法
這是重寫後的辦法
4、內部辦法(這個辦法很別致,聯想到許多)
當辦法聲明包括extern潤飾符時,稱該辦法為內部辦法。內部辦法是在內部完成的,編程說話平日是應用C#之外的說話。內部辦法弗成所以泛型。
extern潤飾符平日與DllImport屬性一路應用,從而使內部辦法可以由DLL(靜態鏈接庫)完成。履行情況可以支撐其他用來供給內部辦法完成的機制。當內部辦法包括DllImport屬性時,該辦法聲明必需同時包括一個static潤飾符。
在應用DLLImport屬性時,必定要引入System.Runtime.InteropServices定名空間,此定名空間是供給各類各樣支撐COM interop及平台挪用辦事的成員。
例4、經由過程內部辦法和Dlllmport屬性挪用“User32.dll”實例自界說信息提醒框的功效
<span >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")]//挪用User32.dll public static extern int MessageBox(int H, string m, string c, int type);//界說的內部辦法 static int Main(string[] args) { Console.Write("請輸出信息:"); string str = Console.ReadLine();//接收輸出的信息 return MessageBox(0,str,"我的信息提醒框",0);//以信息提醒框輸入 } } }</span>
輸入的成果為:
5、分部辦法
若一個辦法聲明中含有partial潤飾符,則稱該辦法為分部辦法。只能講分部辦法聲明為分部類型的成員,並且要遵照束縛數量。分部辦法有著嚴厲的限制。分部辦法必需在分部類或分部機構內聲明。它們必需是公有的,不克不及前往值,不克不及有輸入參數。由於任何針對沒有被完成的分部辦法的挪用都邑簡略地被疏忽,所以說這些限制長短常有需要的。
分部辦法不克不及作為一個明白分派的變量,僅被代碼生成器在處置輕量級事宜的時刻應用。假定用戶解析一個數據庫或許一個XML文件,然後生成了數據類,成果會發明稀有十個類,幾百個屬性和一年夜堆泛型和模板文件等。分部辦法別的一個常常被用到的處所是驗證,或許讓屬性的setter去更新另外一個屬性。所以假如用戶要應用發生的代碼,或許在運轉時有幾百個事宜和千個辦法挪用的話(其實年夜多半情形下只用到了個中的一點點),便可以選擇分部辦法。分部辦法在聲明和應用時要比事宜輕易很多,假如沒有效到它們,它們就會消逝。從分部辦法必需是公有的限制中,
Alexander發明了該辦法的缺乏的地方,即假如用戶愛好原數據驅動的運用,而且曾經被ASP.NET的數據綁定所困擾時(由於沒有其他的辦法可以附上原數據),那末,未來會湧現喪失信息的能夠。
例5、創立一個類的分部辦法而且在另外一個部門中援用
<span >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)//完成聲明 { t += _setup; Console.Write(t); } } partial class Program { static void Main(string[] args) { Program pg = new Program();//創立類對象 pg._setup = 100;//設置屬性 pg.text(50);//挪用辦法 Console.ReadLine(); } } }</span>
輸入的成果為:150
以上就是關於C#的辦法五個例題剖析,願望對年夜家的進修有所贊助。