1. 程式人生 > >CSharp學習筆記之六 類

CSharp學習筆記之六 類

眾所周知,C#是一種面向物件的語言。對於面嚮物件語言,所具備的特徵就是抽象、繼承、封裝、多型。

抽象:所謂的抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。

繼承:所謂的繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

封裝:封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。

多型:多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。

瞭解完面向物件的基本特徵之後,我們來開C#中的類。首先來介紹一下什麼是類.

在現實世界中,經常有屬於同一類的物件。例如,你的自行車 只是世界上很多自行車中的一輛。在面向物件軟體中,也有很 多共享相同特徵的不同的物件:矩形、僱用記錄、視訊剪輯 等。可以利用這些物件的相同特徵為它們建立一個藍圖。物件 的軟體藍圖稱為類。

類是定義同一類所有物件的變數和方法的藍圖或原型。例如,可以建立一個定義包含當前檔位等例項變數的自行車 類。這個類也定義和提供了例項方法(變檔、剎車)的實現。

下面來解釋一下類的基本定義:

在C#中使用class 來定義一個類

class MyClass
{
      // class code
}

在上面你的程式碼中我們定義了一個MyClass類,定義一個類之後,我們就可以在專案中來對該類進行例項化。 比如說MyClass C1。這樣就是例項化一個MyClass的類。在預設情況下,類的宣告是內部的,也就是說,該類在宣告過後,只能夠在該專案中進行訪問。

其實類也可以通過特殊字元來來對該類的進行一個修飾,具體例項如下所示:

public clas MyClass
{
     // MyClass code
}

這樣我們就定義了一個公共的類,而這個公共的類,就不僅僅是使用在當前的專案裡面,而且可以被其他的專案進行一個訪問。

另外我們還可以通過abstract和sealed來定義個抽象類和密封的類,所謂的密封類,就是不能夠用來進行的繼承的類,所謂的抽象類,就是不能夠通過該類進行例項化物件的一個類。

具體的定義事例如下:

public sealed class MyClass
{
     // MyClass code
}

這個例子就是定義了一個密封的類。

類的繼承在C#中的類的繼承其實很簡單,就是通過一個子類:父類,來進行的一個類的繼承的,當讓C#和java是一樣的,類的繼承只支援單繼承,而不支援多繼承。如果繼承了一個抽象類,就必須實現所繼承的所有抽象成員(除非派生類也是抽象的

public class base
{
    // Base class code
}

public calss MyClass:base
{
    //  MyClass code
}


上面的例子給了一個類的繼承的例子。

編譯器不允許派生類的可訪問性比其基類更高。也就是說,內部類可以繼承於一個公共類,但公共類不能繼承於一個內部類。因此,下述程式碼是合法的:

public class MyBase
{
    // Class members;
}
internal class MyClass : MyBase
{
    // Class members;
}

而下面的程式碼是不合法的,編譯器是不能夠編譯通過的:

internal class MyBase
{
    // Class members;
}
public class MyClass : MyBase
{
    // Class members.
} 

上面已經介紹了類只能進行單繼承,不支援多繼承的,但是有些情況要進行多繼承該怎麼辦呢,在C#中是通過介面來實現的。比如說下面的東西來進行的實現

public class MyClass : IMyInterface{// Class members.}

然後呢,這裡附上類的修飾符參考表: