c#抽象類、靜態類與單例模式

抽象類

一、抽象方法

  • 抽象方法的聲明:[訪問修飾符] abstruct 返回值類型 方法名(參數列表);
  • 抽象方法必須放在抽象類裏,class前面要加修飾符abstract
  • 抽象方法沒有方法體,格式就爲:[訪問修飾符] abstruct 返回值類型 方法名(參數列表);
  • 抽象⽅法的訪問修飾符不能是private,因爲private不允許繼承,抽象方法必須在⼦類中全部實現,除⾮⼦類也是⼀個抽象類,那麼可以先不實現該抽象⽅法
  • 抽象⽅法和虛⽅法最⼤的區別:抽象⽅法必須其派⽣類中得以實現,⽽虛⽅法不是⼀定要在其派⽣類去重寫
  • ⽆論是虛⽅法還是抽象⽅法,⼦類進⾏了重寫(實現),那麼⼦類的⼦類依舊可以繼續重寫

二、抽象類

  • 抽象類即可以放抽象⽅法,也可以放普通⽅法
  • 從抽象類派生的非抽象類必須實現抽象類當中的所有抽象方法
  • 抽象類不能被實例化但可以有構造方法,構造方法不能爲抽象方法
  • 抽象類不能⽤sealed關鍵詞修飾

三、sealed關鍵詞

1.密封類

  • sealed關鍵詞修飾的類稱之爲密封類
  • 語法:sealed class 類名
  • 密封類不能被別的類繼承

2.密封⽅法

  • sealed關鍵詞修飾的重寫的⽅法,稱之爲密封⽅法
  • 語法:sealed override 返回值類型 ⽅法名(參數列表)
  • 密封⽅法⽆法再次被其⼦類重寫

靜態類

  • 關鍵詞:static

一、靜態成員

  • 靜態成員變量是和類相關聯的,可以作爲類中“共”有的變量(是一個共性的表現)
  • 靜態成員不依賴特定對象的存在,訪問的時候通過類來操作的
  • 靜態成員在第⼀次訪問這個類的時候(第⼀次⽤到這個類的時候)開闢的內存,比如⽤這個類名去實例化⼀個對象時,⽤這個類型去訪問⼀個靜態字段時
  • 靜態成員在程序結束的時候纔會釋放內存
  • 靜態成員隨着類的加載而加載,無論對一個類創建多少個實例,靜態成員都只有一個副本。普通的實例成員,每有⼀個對象,就有⼀個該成員,⽽靜態成員,跟對象沒有關係,所以⽆論有多少個對象,靜態成員都只有⼀個。例: 實例成員【name】,每有⼀個⼈,就會有對應的⼀個名字,⽽靜態成員【Population】,跟對象沒有關係,⽆論有多少個實例對象,⼈⼝數量只有⼀個
  • 靜態方法可以被重載但不能被重寫,因爲他們是屬於類,不屬於任何實例的
  • 靜態方法只能訪問靜態成員,包括靜態成員變量和靜態方法,⾮靜態⽅法中是可以訪問靜態成員的;實例方法可以訪問實例成員變量與實例方法,也可以訪問靜態成員

二、靜態類

  • 靜態的成員可以放在靜態類中,也可以放在⾮靜態類中
  • 靜態類中只能存在靜態成員,不能存在⾮靜態的成員
  • 靜態類是不能進⾏實例化的

三、靜態構造函數

  • 只有一種寫法:static 類名()
  • 靜態構造函數是固定格式,不能有修飾符,不能帶任何參數
  • 一個類只能有一個靜態構造函數,即靜態構造函數不可以重載
  • 靜態構造函數在程序運⾏期間只會執⾏⼀次,就是在第⼀次訪問該類的時候執行,如:⽤這個類去new⼀個對象、⽤這個類去訪問某個靜態成員、⽤這個類去調⽤某個靜態⽅法
  • 如果有繼承關係,靜態構造函數的執⾏順序是:先執⾏⼦類的靜態構造,再執⾏⽗類的靜態構造
  • 靜態構造函數⼀般⽤於對靜態成員進⾏初始化

單例模式

  • 設計模式:設計模式是指前任反覆設計實踐,總結出來的代碼架構設計思路或模式,常用的設計模式有單例模式,工廠模式,代理模式等
  • 對於系統中的某些類來說,只有一個實例很重要。例如:一個遊戲數據內容,整個遊戲只有這麼一份,在遊戲進行到不同部分時,需要記錄或訪問該遊戲數據。針對這種情況如果某個類只能有一個實例那麼則滿足我們的需求,我們將滿足某個類只有一個實例的代碼設計方式稱爲單例模式
  • 單例模式的三要點:某個類只能有一個實例、必須自行創建這個實例、必須自行向外界提供這個實例
  • 單例模式實現步驟:默認構造使用private修飾、內建該類的靜態實例、靜態構造方法中給該靜態實例做初始化、對外提供獲取該靜態實例的方法
public class SingleTon
{
    private SingleTon() { } //構造方法必須私有化
    private static SingleTon instance; //定義靜態實例
    public static SingleTon GetInstance()
    {
        //對外提供獲取該實例的接口
        if (instance == null)
        {
            instance = new SingleTon();
        }
        return instance;
    }
} 
  • 單例模式的使用
SingleTon singleton = SingleTon.GetInstance();
Console.WriteLine(singleton.name); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章