一、類(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/
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/77399.html
標籤:C#
上一篇:C# 添加、洗掉、讀取Word形狀(基于Spire.Cloud.Word.SDK)
下一篇:C#面向物件--結構
