淺談面向?qū)ο蟪绦蛟O(shè)計C#中的類
類是面向?qū)ο蟪绦蛟O(shè)計的核心概念之一。
1、類的定義
簡單的定義就不多說了,之間看下表,修飾符的含義(使用abstract關(guān)鍵字的類是抽象類,這種類不能被實例化,只能被繼承;而使用sealed關(guān)鍵字的類是封裝類,這種類只能實例化,不能繼承):

需要使用“:”來繼承基類和接口,最多可同時繼承一個基類以及很多接口,它們之間需要用“,”隔開。如:
publicclassMyClass : Mybase, IMyInterface, IMySecondInterface{}
2、接口的定義
接口的定義方式與類相差不大,不活使用的是interface關(guān)鍵字,而不是class。例如:
- interfaceIMyinterface
 - {
 - //Interface members
 - }
 
由于接口不包含執(zhí)行代碼,所以也就沒有抽象接口的概念,所以在聲明接口是一般使用public 和internal,不能使用abstract和sealed。
3、構(gòu)造函數(shù)和析構(gòu)函數(shù)
所有的類都有個默認的構(gòu)造函數(shù),該函數(shù)沒有參數(shù),與類同名。我們在類的定義中可以包含幾個帶參數(shù)的構(gòu)造函數(shù),成為非默認的構(gòu)造函數(shù)。在實例化對象時用new來選擇使用哪個構(gòu)造函數(shù)。
- classMyClass
 - {
 - publicMyClass()
 - {
 - //Default constructor code
 - }
 - publicMyClass(intmyInt)
 - {
 - //Nondefault constructor code(use myInt)
 - }
 - }
 - MyClass myClass = newMyClass(3);
 
析構(gòu)函數(shù)主要用于清理對象,聲明格式如下:
- classMyClass
 - {
 - ~MyClass()
 - {
 - //Destructor body
 - }
 - }
 
構(gòu)造函數(shù)的執(zhí)行序列
在實例化一個派生類時,必須先實例化這個派生類的基類,也就要先實例化這個基類的基類,以此類推,就要先實例化object類。
因此無論實例化一個什么類,都需要先實例化System.Object類,也就是先執(zhí)行System.Object.Object()。
如果一個類使用非默認的構(gòu)造函數(shù),默認的情況是在其基類上尋找匹配于這個構(gòu)造函數(shù)簽名的構(gòu)造函數(shù)。如果沒有找到,則使用基類的默認構(gòu)造函數(shù)。例如:

如果以下面的方式實例化:
MyDerivedClass myObj = newMyDerivedClass();
則執(zhí)行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass()——MyDerivedClass.MyDerivedClass()
MyDerivedClass myObj = newMyDerivedClass(1);
則執(zhí)行的順序如下:
- System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i)
 - MyDerivedClass myObj = newMyDerivedClass(1,1);
 
則執(zhí)行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass()——MyDerivedClass.MyDerivedClass(int i, int j)
但是如果希望執(zhí)行的順序為:System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i, int j)
則需要將MyDerivedClass的非默認構(gòu)造函數(shù)改為:
- publicclassMyDerivedClass : MyBaseClass
 - {
 - ...
 - publicMyDerivedClass(inti, intj) : base(i)
 - {
 - }
 - }
 
base關(guān)鍵字指定.net實例化過程使用基類中匹配指定簽名的構(gòu)造函數(shù)。
除了base關(guān)鍵字外,還有一個this關(guān)鍵字,它指定在調(diào)用指定的構(gòu)造函數(shù)前,.net實例化過程對當前類使用非默認的構(gòu)造函數(shù)。如:
- publicclassMyDerivedClass : MyBaseClass
 - {
 - publicMyDerivedClass() : this(5, 6)
 - {
 - }
 - ...
 - publicMyDerivedClass(inti, intj) : base(i)
 - {
 - }
 - }
 
則執(zhí)行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i, int j)——MyDerivedClass.MyDerivedClass()
 
2011-07-05 16:05:43
2011-07-05 15:22:04
2011-07-22 13:41:57
 
 
 














 
 

 