如何强制单继承?

时间:2012-10-26 11:50:45

标签: c# .net inheritance

我有两个班级:

public class A
{
}

public sealed class B : A
{
}

我希望只有我的B类(在A的同一个程序集中定义)才能继承A
我该怎么办?

4 个答案:

答案 0 :(得分:5)

  

我希望只有我的B类(在A的同一个程序集中定义)才能继承A.我该怎么办?

根本不需要继承..

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

答案 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 ....;
    }
}

答案 2 :(得分:1)

我建议您使用合成而不是继承来限制基类型成员的可见性。

答案 3 :(得分:0)

如果只有B可以继承A,那么你真的需要继承吗?

如果要拆分一个太大的课程,你就不会遵循良好的做法,因为它不太可能有一个单一的责任。

现在,如果出于某些尴尬的原因,你确实需要这个,你可以尝试:

public class B
{
    private sealed class A : B
    {

    }
}

根据您的需要调整它。