2010-11-26 43 views
2

我遇到了FxCop的問題,並且警告:Abstract types should not have constructorsFxCop當沒有新的時候,抽象類型不應該有構造函數

這是顯示爲許多抽象類(可能所有,我沒有檢查)。當我看他們大多沒有新的方法,所以我認爲它是編譯器添加一個默認的方法。因此,要刪除它,我加一個私人默認constuctor(Private Sub New()),這則意味着所有的inherting類未能建立與錯誤: Class 'InheritingClass' has no accessible 'Sub New' and cannot be inherited.

這似乎很奇怪,因爲FxCop的請求,沒有公共的構造,但是當我刪除了構建失敗。

回答

6

嘗試在抽象類中添加一個受保護的,無參數構造函數。

當您不提供構造函數時,編譯器會爲您添加一個public,無參數的。顯然,抽象類是不適合具有公共構造函數的,因爲它們實際上是有效的保護 - 抽象類型的構造函數最多可以被子類調用(這是抽象類型的全部要點 - 它可以'不要實例化'香草')。這種設計缺陷是導致FxCop投訴的原因。

另一方面,您爲解決問題所採取的步驟太極端了;只有的類(抽象與否)私有構造函數在實踐中是不可分類的(除了嵌套類) - 沒有可能在派生類的構造函數中工作的隱式或顯式構造函數調用。

編輯:我喜歡this MSDN page所說的方式:在

In the example above abstract type has a public constructor, which can confuse users. They see the public constructor, but do not understand why they are unable to create the type.

+0

現貨,並且說明是有幫助了。 – themaninthesuitcase 2010-11-26 11:42:39