一、類(Class)是CTS中五種基本類型之一,是一種引用類型,封裝了同屬一個邏輯單元的數據(Data)和行為(Behavior),這些數據和行為通過類中的成員表示;使用class關鍵字定義類: //定義一個公共類MyClass public class MyClass { public int M ...
一、類(Class)是CTS中五種基本類型之一,是一種引用類型,封裝了同屬一個邏輯單元的數據(Data)和行為(Behavior),這些數據和行為通過類中的成員表示;使用class關鍵字定義類:
//定義一個公共類MyClass public class MyClass { public int MyField; //聲明一個int類型的公共實例欄位 public void MyFunc() //聲明一個公共實例方法 { /do… } } //創建類MyClass的實例並賦值給MyClass類型的變數myObj MyClass myObj = new MyClass();
1.在命名空間中定義的類預設為內部類,即internal class,此時只有當前項目中的代碼才能訪問它;通常情況下會將類指定為公共類,即public class,此時可以由其他項目中的代碼來訪問它;
※在命名空間中定義的類只能為public或internal,在其它類型內部定義的類為該類型的嵌套類型,可以指定任何訪問修飾符;
二、在定義類時,還可以指定類是抽象類或密封類,二者不可同時指定;
1.抽象類,即abstract class,不能被實例化,只能被繼承;
※抽象類中可以聲明抽象成員(只有抽象類中才可以聲明抽象成員),也可以聲明任意非抽象成員(雖然無法實例化,但可以聲明構造函數和析構函數);抽象成員包括方法、屬性、事件和索引器,抽象成員不提供實現,沒有方法體,抽象成員不能是私有的,繼承自抽象類的非抽象類必須通過關鍵字override實現基類中的抽象成員;
public abstract class MyAbstractClass //定義一個公共抽象類MyAbstractClass { public abstract void MyFunc(); //聲明一個公共抽象方法MyFunc public abstract int MyProperty //聲明一個公共抽象屬性MyProperty,聲明抽象屬性時只需要聲明需要的訪問器即可,在派生類中重寫抽象屬性時也只能重寫抽象基類中存在的訪問器 { get; } } public class MyClass : MyAbstractClass //定義一個公共類MyClass繼承自抽象類MyAbstractClass { public override void MyFunc() //實現抽象基類中的抽象方法 { //do… } public override int MyProperty //實現抽象基類中的抽象屬性 { get; } }
※雖然抽象類不能直接通過new運算符實例化,但通過隱式轉換可以將繼承自抽象類的類的實例轉換為抽象類的變數:
MyAbstractClass myObj = new MyClass(); //創建MyClass類型的實例,隱式轉換為MyAbstractClass
※抽象類同非抽象類一樣可以繼承其它任何可訪問的非密封類,當抽象類繼承的基類中包含虛方法時,抽象類可以使用抽象方法重寫該虛方法,此時在抽象類的派生類中無法訪問基類中的該虛方法,通過這種方式,抽象類可以強制派生類提供基類中該虛方法的新實現:
public class MyClass { public virtual void MyFunc() { //do… } } public abstract class MyAbstractClass : MyClass { public abstract override void MyFunc(); } public class MyDerivedClass : MyAbstractClass { public override void MyFunc() { //do… } }
2.密封類,即sealed class,不能被繼承;
public sealed class MyClass { }
※密封類中不可以聲明虛成員;如果聲明瞭protected、protected internal或private protected成員會產生編譯器警告CS0628;
※由於密封類從來不用作基類,所以有些運行時優化可以略微提高密封類成員的訪問速度;
三、在定義類時,還可以定義靜態類,即static calss,靜態類與非靜態類基本相同,但存在以下區別:
※靜態類不能實例化,預設即為密封的,不能被繼承,靜態類也不能繼承其它類(預設繼承自Object)或實現任何介面;
※靜態類只能包含靜態成員,始終使用類名訪問靜態類的成員;
※靜態類不包含實例構造函數,但可以包含靜態構造函數,與非靜態類一樣,靜態類也只能聲明一個無參的靜態構造函數,不帶訪問修飾符也不含參數:static MyClass() { };
※在程式運行時,會在首次引用靜態類之前初始化其欄位並調用其靜態構造函數,靜態構造函數只調用一次,在程式所駐留的程式域的生存期內,靜態類會保留在記憶體中
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的認可是我寫作的最大動力!
作者:Minotauros
出處:https://www.cnblogs.com/minotauros/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。