標籤:style blog http color io os 使用 ar 檔案
一:抽象方法
1. 在物件導向程式設計語言中抽象方法指一些只有方法聲明,而沒有具體方法體的方法。抽象方法一般存在於抽象類別或介面中。
在一些父類中,某些行為不是非常明確,因此無法用代碼來具體實現,但是類還必須具備此方法,因此,把這樣的方法定義為抽象方法。
2. 聲明方法:public abstract Eat(); 方法聲明只是以一個分號結束,並且在簽名後沒有大括弧,沒有函數體,因為太抽象不清楚,具體的實現由各個子類中重寫函數實現。
3. 它的特點:
(1) 抽象方法是隱式的 virtual 方法。
(2) 只允許在抽象類別中使用抽象方法聲明。
(3) 因為抽象方法只聲明不提供實實現,所以沒有方法體。抽象方法只在衍生類別中真正實現,這表明抽象方法只存放函數原型(方法的傳回型別,使用的名稱及參數),而不涉及主體代碼。
(4) 加abstract關鍵詞。
(5)抽象方法的目的在於指定衍生類別必須實現與這一方法關聯的行為。
二:抽象類別
1. 抽象類別:無法被執行個體化的類。關鍵詞是abstract,凡是帶有abstract關鍵詞的類都無法被new出來。抽象類別是不完整的,它只能用作基類。在物件導向方法中,抽象類別主要用來進行類型隱藏和充當全域變數的角色。
2. 聲明:抽象類別聲明:public abstract class Ren{};
3. 注意:
(1)凡是帶有抽象方法的類肯定是抽象類別;抽象類別卻不一定包含抽象方法。
(2)構造方法,靜態成員方法不能聲明為抽象方法。
(3)一個非抽象類別必須實現從父類繼承來的所有抽象方法,如果有一個抽象方法沒有實現,則此類必須要加abstract關鍵字。如果父類被聲明為抽象類別,並存在未實現的抽象方法,那麼子類就必須實現父類中所有的abstract成員,除非該類也是抽象的。
4. 特徵:
(1)抽象類別不能執行個體化。
(2)一個抽象類別可以同時包含抽象方法和非抽象方法。
(3)不能用sealed修飾符修飾抽象類別,因為這兩個修飾符的含義是相反的,採用sealed修飾符的類無法繼承,而abstract修飾符要求對類進行繼承。
(4)從抽象類別派生的非抽象類別必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
例子:Ren類中有一個抽象方法Eat(),在其衍生類別Chinese和American中必須重寫這個方法
abstract class Ren { protected string name; public abstract void Eat(); } class Chinese:Ren { public override void Eat() { Console.WriteLine("用筷子吃飯"); } } class American : Ren { public override void Eat() { Console.WriteLine("用刀叉吃飯"); } }
三:介面
1. 關鍵字:interface,用interface 關鍵詞來定義。
2. 概念:極度抽象的類,無成員變數,無執行個體屬性和執行個體方法,只有抽象方法或抽象屬性,生活中的例子:標準,規則。
3. 寫法:介面不用class,用interface,名字一般以I作為首字母;不用寫abstract,裡面所有都是,不用寫public,必須是public。
interface IUSB //介面 { void start(); void stop(); }
4. 特點:
(1)介面中的方法都是抽象的,因此無需加abstract修飾符。
(2)介面中的方法都是公用的,因此無需加public修飾符。
(3)介面就是一個規則標準。
(4)介面可以繼承父介面。
(5)一個類可以實現(繼承)多個介面。一個類只能有一個父類,但可以實現多個介面。
例子:簡單的IUSB介面,裡面有兩個抽象方法start()和stop(),衍生類別實現介面必須實現介面中的所有方法。
interface IUSB //介面 { void start(); void stop(); } class UDisk : IUSB //實現介面必須實現裡面的所有方法 { public void start() { Console.WriteLine("隨身碟啟動了"); } public void stop() { Console.WriteLine("隨身碟停止了"); } } class Cammer : IUSB { public void start() { Console.WriteLine("網路攝影機啟動了"); } public void stop() { Console.WriteLine("網路攝影機關閉了"); } } class computer { public void CheckUSB(IUSB usb) { usb.start(); } public void CloseUSB(IUSB usb) { usb.stop(); } }
用的時候:
computer c = new computer(); UDisk u = new UDisk(); Cammer m = new Cammer(); c.CheckUSB(u); //插入隨身碟 c.CheckUSB(m); //插入網路攝影機 c.CloseUSB(u); //拔出隨身碟 c.CloseUSB(m); //插入網路攝影機
四:命名空間
1. 概念:namespace 相當於一個包,它是對類進行分類管理的工具,給電腦看的,相同命名空間下的類可以分在不同的檔案中儲存。
2. 一般寫法:namespace 公司名.項目名.模組名
3. 在別的命名空間上面要使用其它命名空間內的類,可以在它的上面寫 using 要使用的命名空間;
五:項目名
一般預設:ConsoleApplication1,用來給人類標識出這個項目是做什麼的,給人看的。
六:程式集
在項目名上打右鍵:屬性,即可修改程式集名稱
編譯出來的exe或dll檔案就是程式集。exe是控制台應用程式,dll是庫類。
程式集的名字就是編譯出來的exe或dll名字。
如果一個項目分三個人來寫,A寫一個類庫,B寫一個類庫,C寫Main函數,把他們整合在一起的流程是:
1. A寫完了編譯出一個名字如 cc.dll 的檔案;
2. B寫的時候要用到A命名空間中的某個類,B先將A的cc.dll檔案拷貝到自己的目錄下,B需要在項目中的引用上打右鍵:添加引用,通過瀏覽找到該引用添加進來,然後using A 的命名空間;
3. B寫完了編譯出一個名字如 dd.dll 的檔案;
4. C要寫Main函數,在Main函數中操作AB中的類,他需要將AB的dll檔案拷貝過來,然後再項目中的引用上打右鍵,添加引用,通過瀏覽找到該引用添加進來,然後using A 的命名空間; using B的命名空間,這樣就可以在Main函數中用了。
5. 如果A的命名空間中有個類Ren和B的命名空間中有個類Ren重名了,這C在用的時候要用哪一個命名空間下的Ren類就要用該命名空間點出來再用。
C#物件導向(二)