2011-06-15 100 views

回答

7

你可以把它和派生類放在一個單獨的程序集中,並聲明基類的構造函數爲internal。這樣,雖然你可以在不同的程序集中繼承它,但是你不能實例化任何派生類。

+0

你怎麼可以繼承但不能實例化? – Mehrdad 2011-06-15 04:54:13

+3

@Mehrdad:由於派生類調用基的構造函數,因此它必須有權訪問該構造函數。將'internal'訪問權限僅允許相同程序集(或朋友程序集)中的派生類調用基礎。還應該指出,派生類應該是「密封的」。 – 2011-06-15 04:59:39

+0

@Travis:但是你怎麼能強制派生類沒有實例化呢? – Mehrdad 2011-06-15 05:00:30

-1

可以使A類abstarct和任意數量的類繼承它..

+1

我認爲在這種情況下,N = 3 – 2011-06-15 04:59:12

+0

@Tom:請參閱由Abatishchev給出的答案,我只是想告訴相同的..我想過提示後,休息提問者可以谷歌... – Stuti 2011-06-15 05:09:25

4

沒有,但你總是可以做,如果它超過了限制的構造函數拋出異常。

+0

我怎麼知道從A繼承了多少個類? – 2011-06-15 05:02:16

+0

在基類構造函數的散列表中記錄'this'的類型。 – Koterpillar 2011-06-15 05:10:36

3
// can be inherited only by classes in the same assembly 
public abstract class A 
{ 
    protected internal A() { } 
} 

// can't be inherited 
public sealed class B : A 
{ 
} 
1

只是我個人的薰陶,我想在閱讀題目是:「哦,非常非常糟糕的主意!有更多的瞭解業務環境,這使得這樣的設計選擇可取的,因爲我的第一個thougt基類從來不應該知道任何事情(更糟糕的是:要規則)它的派生類「。

相關問題