一、繼承
什麼是繼承:
繼承是允許重用現有類去建立新類的過程。分類的原則是乙個類派生出來的子類具有這個類的所有非私有的屬性。
1
、繼承c#
中的類:c#
不支援多重繼承,
c#類始終繼承自乙個基類(如果未在宣告中指定乙個基類,則繼承自
system.object
)。派生類繼承基類的語法如下:
using system; public class person public class student:person
注:派生類繼承基類時用「:」符號連線,派生類繼承基類的所有非私有成員變數和方法。
2
、呼叫基類的建構函式:如果對類沒有定義顯式建構函式,則編譯器將提供預設的建構函式,以初始化這些類的成員字段。但是,如果顯式新增了建構函式,就可以有效控制整個構造過程。
示例:using system; namespace jicheng } //
派生類public class student:person } public class exercise } }
注:派生類通過使用
:base
()語法可以顯式呼叫基類的建構函式。在必要的情況下,可以利用它來初始化字段。
二、c#
中的方法重寫關鍵字:override
override
關鍵字用語修改方法,具有
override
關鍵字修飾符的方法是對基類中同名方法的新實現,基類中的同名方法必須宣告為
virtual
或abstract
型別。給基類中的方法新增
virtual
關鍵字表示可以在派生類中重寫它的實現。
1、預設的
c#方法並非
virtual
,因此不能重寫。
2、基類方法的可訪問級別並不因重寫它的方法而改變,他們的訪問修飾符相同。3、
new、
static
和virtual
關鍵字不能與
override
訪問修飾符一同使用
關鍵字:virtual
c#
中提供virtual
關鍵字,用語將方法定義為支援多太,用於對乙個類中可修改的方法的宣告,這種方法稱為虛擬方法,字類可以使用
override
關鍵字自由實現它們各自版本的虛擬方法
語法:[
訪問修飾符
] virtual [
返回值型別
] 方法名稱(
[引數列表])
1、virtual
訪問修飾符不能與
static
和override
等訪問修飾符一同使用
2、呼叫虛擬方法,在執行時系統會自動檢查,以確定調調用了哪乙個實現方法。
關鍵字:new
new
訪問修飾符用於顯式隱藏繼承自基類的成員,如果派生類成員與基類成員名稱相同,
new會將派生類成員識別為乙個全新成員。
1、在乙個方法中同時使用
new和
override
將會出錯。2、
new訪問修飾符的真正目的是為了隱藏基類方法。
3、如果將乙個方法生命為
new,它實際上並沒有隱藏基類方法,並且編譯器也產生了警告,這時應該刪除
new。
三、抽象類和抽象方法什麼是抽象類:不能被例項化的類稱為抽象類,抽象類是派生類的基類。
關鍵字:
abstract
語法:abstract class
類名 1
、乙個抽象類可以同時包含抽象方法和非抽象方法。
2、抽象方法只在派生類中真正實現,這表明抽象方法只存放函式原型,不涉及主體**,
3、派生自抽象類的類需要實現其基類的抽象方法,才能例項化物件。
4、使用
override
關鍵子可在派生類中實現抽象方法,經
override
宣告重寫的方法稱為重寫基類方法,其簽名必須與
override
方法的簽名相同。
示例:using system; namespace example_5 //
派生類class derv:abc } public class test } } 5
、基類實現抽象類,則派生類不需要重新實現該抽象類。
6、抽象類並不僅僅只是一種實現技巧,它更代表一種抽象的概念,從而為所有的派生類確立一種約定。
四、介面關鍵字:
inte***ce
語法:修飾符
inte***ce
介面名1
、乙個介面就相當於乙個抽象類,但是它不能半喊任何實現方法。
2、介面的每種方法都必須在派生類中實現。
3、介面有時候可以看成是類的模具,它指明乙個類該提供哪些內容。
4、介面主體只限於方法、索引器、屬性的宣告。
5、介面中不能包含字段、建構函式和常量等。
6、介面成員是隱式公開的,如果對其顯式指定訪問級別,就會出現編譯器錯誤。
7、在介面中不能實現任何方法,屬性或者索引器。
8、在指定方法時,只需給出返回型別、名稱和引數列表,然後以分號結束。
9、實現介面的語法與實現繼承一樣,都用冒號「:」
示例inte***ce icustomer public class myclass: icustomer 10
、介面中的方法不能重寫,只能實現。11、
編碼標準:
介面名稱需始終冠以大寫字母
i五、多重介面實現c#
中多重介面的實現,彌補了
c#只能單一繼承,不能多重繼承弱點。
語法示例:
public intetface iname public inte***ce iage public class consoleshow: iage, iname public void age() }
六、顯式介面實現如果
兩個介面中有完全相同的簽名,那麼可以用「介面名
.方法名」的方法顯式的來實現介面。
示例:public inte***ce iname public inte***ce iage public test: iname, iage void iage test() }
七、介面繼承
通過合併其他介面,也可以新建介面。用於合併介面的語法於繼承的語法非常相似,只是前者可以將多個介面合併成乙個。乙個類要實現乙個介面,必須為基介面和派生藉口的所有成員編寫**。
C 中的繼承
繼承,資料抽象和動態繫結是物件導向程式設計的核心思想。使用繼承,可以定義相似的型別並對其相似關係進行建模。通過繼承聯絡在一起的類構成一種層次關係,通常在層次關係的根部有乙個基類,其他類則直接或間接地從基類繼承而來,這些繼承得到的類稱為派生類。下面就讓我們一起來 繼承中的一些常見問題。1.繼承方式cl...
C 中的繼承
繼承是c 中的三大特性之一。繼承機制是物件導向程式設計使 可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能。這樣產生新的類,叫做派生類。繼承定義的格式 class deriveclassname 派生類名 asecc label 繼承型別 baseclassna...
C 中的繼承
先看一下下面的例子 file1 cbase.h include using namespace std class cbase virtual cbase void 如果乙個類被用來作為基類的時候,最好把析構函式寫成虛函式。這樣做是為了當用 乙個基類的指標刪除乙個派生類的物件時,派生類的析構函式會被...