2012-11-15 45 views
2

我已經寫了一個程序集的類,只應該被這個程序集中的工廠實例化。如何防止外部類實例但保持可用?

外面大會:

MyClass myClass = factoryInstance.GetInstanceOfMyClass(); 

應當禁止實例化之外

禁止該類:

MyClass myClass = new MyClass(); 

我已經看到了一些複雜的方法。有沒有一種簡單的方法我錯過了?

回答

7

最簡單的方法應該是使構造internal

public class MyClass 
{ 
    internal MyClass() 
    { 
    } 
} 

只要你的工廠方法位於同一程序將能夠創建類的實例,但外部的任何代碼大會將無法做到這一點。

+3

Damnit,我討厭它,當「1個新答案已發佈」彈出xD +1 – Sean

2

只需構造函數內部的可見性,以便它所包含的程序集外部沒有其他類可以看到它。

大會1

public class MyClass 
{ 
    internal MyClass() 
    { 
    // ... code here ... 
    } 
} 

public class MyFactory 
{ 
    public MyClass GetInstanceOfMyClass() 
    { 
    return new MyClass(); 
    } 
} 

大會2

// Invalid 
MyClass myClass = new MyClass(); 

// Valid 
MyClass myClass = myFactoryInstance.GetInstanceOfMyClass(); 

然後你就可以實例化的組件中的這個類(通過你的工廠),但它不能在組件外部被實例化。