2011-06-15 72 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基类从来不应该知道任何事情(更糟糕的是:要规则)它的派生类“。

相关问题