3

我有两节课:

public class A
{
}

public sealed class B : A
{
}

而且我希望只有我的B类(在同一个程序集中定义A)可以继承A.
我能怎么做?

4

4 回答 4

5

而且我希望只有我的 B 类(在 A 的同一程序集中定义)可以继承 A。我该怎么办?

那么根本不需要继承..

public sealed class B
{
  //includes all methods of A and B
}
于 2012-10-26T11:52:20.117 回答
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 ....;
    }
}
于 2012-10-26T11:54:13.487 回答
1

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

于 2012-10-26T11:52:33.330 回答
0

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

如果要拆分一个变得太大的班级,那么您就没有遵循良好的做法,因为它不太可能承担单一责任。

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

public class B
{
    private sealed class A : B
    {

    }
}

并根据您的需要进行调整。

于 2012-10-26T11:54:30.667 回答