C 泛型設計的乙個小陷阱

2022-01-13 14:01:16 字數 1666 閱讀 9569

距離上次發表部落格已經有幾年了. 對於沒能堅持更新部落格,實在是感覺到甚是慚愧. 

閒言少敘, 直接切入主題.

最近一直在對於公司乙個網路通訊服務程式使用.net core 進行重構.重構的目的有兩個:一是讓程式能夠跨平台執行. 二是優化程式**結構是程式的可維護性有所提公升.  重構的過程主要由我來設計底層的架構. 在這個過程中,由於我對c# 泛型的理解還不夠深入,所以在這個方面我就犯了個錯誤. 希望本文能把我犯的這個錯誤闡述清楚, 如果能幫助園裡其他朋友避免這個問題當然是最好的了.

先用一張圖來描述早前的**結構

singleton:是乙個單例的基類, 用來實現單例模式.

base:則是乙個基礎類,它有一些靜態的屬性和方法(例如訪問redis,kafka,資料庫等). 這些屬性和方法提供給 child1 和 child2 去使用.

child1 和child2: 相當於不同模組的業務邏輯實現.

我期望的結果是base裡面的靜態成員在整個程式執行期間只有乙份.

singleton

public

abstract

class singletonwhere t : new

() }}

return

instance;}}

}

base

public

class base: singletonwhere t : new

()

static

base()

}

child1 和child2

public

class child1 : base

public

class child2 : base

我以為 base的靜態建構函式只會執行一次. 可是當我在程式裡使用 child1.instance 和 child2.instance 時發現, base的靜態建構函式被執行了2次. 那麼child1.instance的object和child2.instance的object物件一定不是同乙個.

如果要達到我設計的目標應該怎麼做呢?

還是先上類圖.

}child1 和child2:

public

class child1 : singleton

public

class child2 : singleton

由singleton 來繼承base.然後child1 和child2來繼承singleton. 這樣問題就都解決了.

設計乙個泛型演算法

演算法的目的很簡單,找出小於 大於 elem size的元素並列印.先貼上 include algorithm 泛型演算法 include functional function object include vector include iostream using namespace std t...

如何設計乙個泛型演算法

include include include include include using namespace std 下面我們的新任務。使用者給乙個整數 vector 我們必須返回乙個新的 vector 其中內含原 vector 之中小於 10 的所有數值 乙個快速但缺乏通用性的解法是 vecto...

while的乙個小陷阱

先看一段 示例 pragma warning disable 4996 include copy.h char mystrcpy char desc,const char src 為了讓 看起來更加的簡潔美觀,我一直喜歡這樣寫while,而且也沒出過什麼問題。但是這樣寫是否存在問題,看一下下面這個示...