2009-11-05 100 views

回答

21

絕對正確。你應該喜歡受保護的構造函數。

編輯:不,編譯器不會抱怨,但像FxCop(&代碼分析)這樣的工具。我相信你可以用抽象類的公共構造函數做一些奇怪的反射技巧,但是從僅僅爲其他開發人員編寫子類提供基類功能的角度來說,堅持使用受保護的構造函數。

+0

同意。這是更詳細的:http://stackoverflow.com/questions/2700256/why-cant-create-object-of-an-abstract-class – 2012-05-11 07:04:34

2

是的,你是對的,實際上公共構造函數在abscract類中沒有用處,因爲你不能創建它們。

然而,編譯器不會抱怨,因爲這種方式有許多你可以在c#中編寫的無用的東西,但它不能檢查它的邏輯含義,它只能檢查它設置的解析規則。

肯定c#的創建者一直專注於創建實際有害並違反語言使用的編譯語法(規則)。

4

你是對的。抽象類中的公共構造函數在功能上等同於受保護的構造函數。

在這種情況下,我更喜歡使用受保護的構造函數。

儘管編譯器確實不會抱怨你這樣做,但編譯器會抱怨嘗試生成抽象類的實例。如果您嘗試實例化抽象類,Visual Studio也足夠智能,不會提供Intellisense。

+0

有一些邊緣情況下可以簡化的反射,通過使抽象類構造函數公衆......但他們非常罕見。我通常同意抽象類中的構造函數應該受到保護(如果被其他構造函數重載調用,它們應該是私有的)。 – LBushkin 2009-11-05 17:53:15

相關問題