衆所周知,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.}
然後呢,這裏附上類的修飾符參考表: