2012-10-26 37 views
3

我有兩個類:如何強制單繼承?

public class A 
{ 
} 

public sealed class B : A 
{ 
} 

而且我想,只有我B類(在A相同的組件定義)可以繼承A
我該怎麼辦?

回答

5

我想只有我的B類(在A的同一個程序集中定義)可以繼承A.我該怎麼辦?

是根本不存在需要繼承的話..

public sealed class B 
{ 
    //includes all methods of A and B 
} 
+0

有我重複我的代碼?這不是一件好事...... A級必須存在。 – Nick

+0

它會如何重複?只有一個類可以繼承它,所以它是基類和繼承者之間的1-1映射。複製是不可能的。 – jgauffin

+1

你可能想解釋爲什麼'A'不能成爲B的一部分。 – jgauffin

1

我建議你使用,而不是組成繼承來限制基本類型成員的可見性。

2

您可以使用一個internal構造函數,這可以防止其他程序集使用您的類。

public class A 
{ 
    internal A() { }  
} 
public sealed class B : A { } 

而且,如果你不關心性能:

public class A 
{ 
    public A() 
    { 
     Type c = GetType(); 
     if (c != typeof(A) && c != typeof(B)) throw ....; 
    } 
} 
+0

其他程序集可以使用類A(請參閱公共訪問修飾符)。 – Nick

+0

@Nick他們可以使用它,但不能從它繼承。而你不會說「使用」你只說「繼承」。 –

0

如果僅有B可以繼承A,那麼你真的需要繼承擺在首位?

如果是分裂一個變得太大的班級,你不會遵循良好的做法,因爲它不可能有單一的責任。

現在,如果你確實需要做一些這方面的尷尬原因,你可以嘗試:

public class B 
{ 
    private sealed class A : B 
    { 

    } 
} 

它調整您的需求。