昨天在學習C#的過程中學到了幾個關鍵字,今天做了總結,忍不住要來與大家分享一下,它們分別是This關鍵字,Base關鍵字,New關鍵字Override關鍵字和Overload關鍵字 1.New 先舉一個生活中的例子,我們把電腦看做一個類,如果你想買一台電腦的話就要用到New這個關鍵字,如果你買的是lenovo牌的電腦就應該這樣:電腦 lenovo=new 電腦 如果還要買一台iphone的,那就應該這樣啊:電腦 iphone=new 電腦 不管是普通的電腦還是更有檔次的iphone電腦,他們都少不了鍵盤,鼠標,顯示屏,電源等,這些都是他們共有的屬性 再來說C#,一個包裝好了的功能的代碼塊就可以作為一個類。但是你不能直接使用它,因為面向對象概念中是不允許隨便修改類的內容的,所以在C#中想實現這種功能就需要實例化一個類了。就像電腦這個類,如果你想使用的話是完全沒有問題的,但是不能私自將電腦的一些基本的性質修改了,比如你不能講電腦的鍵盤拿掉。但是你還很固執,認為自己用不上鍵盤只用鼠標就能滿足自己的需要了,這時候你就該實例化了,系統將會給你一個具有電腦通用功能的模型,你自己取個名字 ,以後這個電腦就歸你管了,卸鍵盤,拔掉鼠標,在電腦上弄點裝飾品等都可以,但是這都要加到你的實例中,不能加到類中,如果你加到了類中,當別人再去實例化的時候就跟你的電腦一樣了,也沒有了鍵盤,那別人想打字該怎麼辦啊? 不知道這個例子會不會對你理解有所幫助呢? 在C#中,new關鍵字可用作運算符或修飾符。不過我對修飾符吧、的那部分不理解,下面就給出了對做運算符時的總結 new運算符 1.用於創建對象和調用構造函數 例: [html] <span style="font-size:18px;">Class_Test MyClass = new Class_Test(); </span> 2.用於為值類型調用默認的構造函數 例: [html] <span style="font-size:18px;">int myInt = new int(); </span> myint初始化為0,他是int類型的默認值,該語句等同於:int myint=0; 3.不能重載new運算符 4.如果new運算符分配內存失效,則它將引發OutOfMemoryException異常 2.Base(base可以完成創建派生類實例時調用其基類構造函數或者調用基類上已被其他方法重寫的方法) (1).base調用基類構造函數 [html] <span style="font-size:18px;">public class A { public A() { Console.WriteLine("Build A"); } } public class B:A { public B():base() { Console.WriteLine("Build B"); } static void Main() { B b = new B(); Console.ReadLine(); } } </span> [html] 這樣一來就可以同時輸出BuildA 和BuildB 啦 (2).base調用基類已被重寫的方法 [html] style="font-size:18px;">public class A { public virtual void Hello() { Console.WiriteLine("Hello"); } } public class B : A { public override void Hello() { base.Hello();//調用基類的方法,顯示Hello Console.WiriteLine("World"); } }</span> 如果程序調用B.Hello()的 話,輸出的結果既不是Hello也不是World,而是Hello World啦 3.This(用來解決名稱相同的問題) [html] <span style="font-size:18px;">class Employee { public void SetEmpName(string EmpName) { <span style="color:#ff6666;"> EmpName = EmpName;//這個語句有問題</span> } private string EmpName; //Employee的成員變量 }</span> 上訴代碼的本意是要將SetEmpName的傳入參數EmpName的指指定給Employmentyee類的成員變量EmpName。但是這樣做並沒有成功,因為系統並不知道上訴問題語句中的第一個EmpName指的是類成員。這時候就用到了This關鍵字,解決方法是將上例中紅色的代碼修改成:this。EmpName=EmpName 值得注意的是:靜態方法中不能使用this 4.override和overload Override 是在繼承的時候,如果你寫的函數與要繼承的函數函數特征相同,那麼,加上這個關鍵字,在使用這個子類的這個函數的時候就看不見父類(或超類)的函數了,它被覆蓋掉了。 比如:Derived繼承了Base,Base裡面有void A(int a) ,那麼如果你Derived裡面覺得A寫得不好或不適合這個類,你想重新再寫一遍A裡的代碼,那麼就寫override void A(int a)這樣,原來的那個函數就被你新寫的這個覆蓋掉了。 Overload 是重載,就是說函數名相同,函數特征不同,系統會根據你提供的參數來調相應的函數。 比如:void A(int a)和void A(int a,int b) 如果你用的是A(1)那麼調的是第一個,如果是A(1,1)那麼調的是第二個。 注意: 重寫基方法必須與重寫方法具有相同的簽名。 不能重寫非虛方法或靜態方法。重寫基方法必須是虛擬的、抽象的或重寫的。 也就是說,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。 當類包含兩個名稱相同但簽名不同的方法時發生方法重載 [html] <pre name="code" class="html"><pre name="code" class="html"><pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> </pre></pre>