2010-11-05 46 views

回答

9

我想你可以使类internal的构造函数只有你的程序集中的其他类可以从它们派生出来,如果你仍然需要创建那个类的实例,你可以提供一个工厂方法来返回实例。

编辑添加一个样本:

public class MyFoo 
{ 
    internal MyFoo() 
    { 
    } 

    public static MyFoo CreateFoo() 
    { 
     return new MyFoo(); 
    } 
} 
+0

很酷,很好。谢谢! – 2010-11-05 03:29:51

0

您也可以尝试做这样的事情。

internal class InternalExtendible 
{ 
    public string MyProperty { get; set; } 
} 

public sealed class ExternalSealedClass : InternalExtendible 
{ 
} 

创建一个内部类并创建一个继承自内部类的公共空类。当引用dll时,只有公共类对用户可见,但内部类的所有功能都将暴露。

+1

发生在我身上,但最大的问题是如果有公共可访问的方法正在消耗或返回此类型 - 签名是什么?如果你使用ExternalSealedClass,你的“真实”继承者将不符合资格。如果你使用'InternalExtensible',你的方法就不能公开了。 – mquander 2010-11-05 02:33:46

+0

@mquander难道你不能通过编程到接口来解决这个问题吗?即您的签名看起来像“void DoSomething(IExtendableOrSealed item){...}” – Michael 2012-04-09 23:04:25

相关问题