2010-11-05 23 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

相關問題