C 如何寫出乙個不能被其他程式集繼承的抽象類

2021-09-26 16:30:23 字數 1008 閱讀 4813

我需要限定某個抽象類只能在我程式集類實現,而不支援其他程式集實現,也就是我需要乙個不能被繼承的抽象類

在 c# 裡面有抽象類和介面,這兩個都是期望被繼承才能被使用,而抽象類是可以做到只能在自己程式集和程式集可見的其他程式集實現,而在其他的程式集是不能實現

在開始告訴大家如何寫之前,需要說明在什麼時候需要使用這個方法

有一些介面或方法等需要傳入乙個抽象的類,但這個抽象類裡面有很多方法或屬性的定義是和程式集內邏輯相關的,也就是開發者如果直接在外面繼承這個抽象類實現出來的一定是不符合預期的。此時就需要用到本文的方法

此時就不能使用介面,因為介面是無法限制只能在程式集內實現,也就是在程式集外依然可以使用者自己定義

寫出乙個只能在程式集內繼承的抽象類的方法是在抽象類裡面放乙個需要被重寫的部件,這個部件的訪問優先順序為程式集內,例如下面的**,在抽象類 a 裡面新增了需要繼承重寫的 b 方法,而 b 需要用到程式集內才能訪問的介面

// 程式集 1

public

abstract

class

ainternal

inte***ce

ib

上面**的抽象類 a 就只能在程式集 1 中實現,而無法在程式集 2 重寫,例如下面**將會提示重寫方法 b 的介面沒有許可權,而不重寫方法 b 就不能繼承 a 於是開發者就不能自己實現繼承,這樣的寫法可以讓 sdk 開發了多型,但又不讓開發者傳入不對的值

// 程式集 2

classc:

a}

這樣的寫法在框架裡面有很多,例如 wpf 框架裡面的 brush 畫刷就是這樣做的,請看 brush.cs 的實現

在 wpf 裡面認為畫刷資源是不能給開發者自己寫的,因為開發者應該不能了解畫刷是如何做的,而在很多類的屬性或方法引數都需要傳入畫刷,因為畫刷有純色畫刷等,不能寫統一的畫刷,於是就通過抽象類,用本文的方法做到讓開發者只能用程式集裡面定義的畫刷。這樣可以讓框架**做到支援多個不同的畫刷同時讓開發者不會隨意繼承畫刷,解決在框架裡面大量引數判斷

教你如何寫出乙個碎片輪播

對於幾乎每乙個入行前端的小夥伴來說,輪播圖幾乎都是必修課,但是,只是單純的切換過渡可能並不能滿足於你追求酷炫的心hh,那麼這裡就教你利用css3的clip path來模擬碎片並為你的輪播圖新增碎片輪播的效果!對於一張來說,如果在原有的基礎上新增一層蒙版,遮蔽住不想讓使用者見到的檢視,剩下的檢視即可作...

c 如何寫乙個自殺程式

很簡單,分為四部 1 主程式執行的時候,呼叫filestream 在磁碟上寫出乙個新的執行檔案,這個執行檔案可以當成資源檔案嵌入到主程式中。2 主程式通過程序管理啟動這個新生成的執行檔案。3 主程式和新程序之間通訊,這個方法就太多了,比方說socket 4 主程式退出,新程序刪除主程式。說下思路吧 ...

如何寫乙個MPI程式

2.輸入命令sudo apt get install y build essential,通過包管理器安裝build essential來實現基礎的編譯環境。3.輸入gcc v來檢視gcc版本資訊。5.輸入mpicc v來觀察mpicc版本資訊。6.輸入 cd 切換到使用者家目錄。7.輸入vim m...