C#中的類

來源:互聯網
上載者:User

  類是物件導向程式設計的核心概念之一。

  1、類的定義

  簡單的定義就不多說了,之間看下錶,修飾符的含義(使用abstract關鍵字的類是抽象類別,這種類不能被執行個體化,只能被繼承;而使用sealed關鍵字的類是封裝類,這種類只能執行個體化,不能繼承):

 

  需要使用“:”來繼承基類和介面,最多可同時繼承一個基類以及很多介面,它們之間需要用“,”隔開。如:

  

public class MyClass : Mybase, IMyInterface, IMySecondInterface
{
}

 

  2、介面的定義

  介面的定義方式與類相差不大,不活使用的是interface關鍵字,而不是class。例如:

  

interface IMyinterface 
{
//Interface members
}

  由於介面不包含執行代碼,所以也就沒有抽象介面的概念,所以在聲明介面是一般使用public 和internal,不能使用abstract和sealed。

 

  3、建構函式和解構函式

  所有的類都有個預設的建構函式,該函數沒有參數,與類同名。我們在類的定義中可以包含幾個帶參數的建構函式,成為非預設的建構函式。在執行個體化對象時用new來選擇使用哪個建構函式。

class MyClass
{
public MyClass()
{
//Default constructor code
}

public MyClass(int myInt)
{
//Nondefault constructor code(use myInt)
}
}
MyClass myClass = new MyClass(3);

  解構函式主要用於清理對象,聲明格式如下:

class MyClass 
{
~MyClass()
{
//Destructor body
}
}

 

  建構函式的執行序列

  在執行個體化一個衍生類別時,必須先執行個體化這個衍生類別的基類,也就要先執行個體化這個基類的基類,以此類推,就要先執行個體化object類。

因此無論執行個體化一個什麼類,都需要先執行個體化System.Object類,也就是先執行System.Object.Object()。

  如果一個類使用非預設的建構函式,預設的情況是在其基類上尋找匹配於這個建構函式簽章的建構函式。如果沒有找到,則使用基類的預設建構函式。例如:

  

 

  如果以下面的方式執行個體化:

MyDerivedClass myObj = new MyDerivedClass();

則執行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass()——MyDerivedClass.MyDerivedClass()

MyDerivedClass myObj = new MyDerivedClass(1);

則執行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i)

MyDerivedClass myObj = new MyDerivedClass(1,1);

則執行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass()——MyDerivedClass.MyDerivedClass(int i, int j)

  

但是如果希望執行的順序為:System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i, int j)

則需要將MyDerivedClass的非預設建構函式改為:

public class MyDerivedClass : MyBaseClass
{
...

public MyDerivedClass(int i, int j) : base(i)
{
}
}

  base關鍵字指定.net執行個體化過程使用基類中匹配指定簽名的建構函式。

  除了base關鍵字外,還有一個this關鍵字,它指定在調用指定的建構函式前,.net執行個體化過程對當前類使用非預設的建構函式。如:

public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : this(5, 6)
{

}

...

public MyDerivedClass(int i, int j) : base(i)
{

}
}

則執行的順序如下:System.Object.Object()——MyBaseClass.MyBaseClass(int i)——MyDerivedClass.MyDerivedClass(int i, int j)——MyDerivedClass.MyDerivedClass()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.