2
我已經寫了一個程序集的類,只應該被這個程序集中的工廠實例化。如何防止外部類實例但保持可用?
外面大會:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
應當禁止實例化之外
禁止該類:
MyClass myClass = new MyClass();
我已經看到了一些複雜的方法。有沒有一種簡單的方法我錯過了?
我已經寫了一個程序集的類,只應該被這個程序集中的工廠實例化。如何防止外部類實例但保持可用?
外面大會:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
應當禁止實例化之外
禁止該類:
MyClass myClass = new MyClass();
我已經看到了一些複雜的方法。有沒有一種簡單的方法我錯過了?
最簡單的方法應該是使構造internal
:
public class MyClass
{
internal MyClass()
{
}
}
只要你的工廠方法位於同一程序將能夠創建類的實例,但外部的任何代碼大會將無法做到這一點。
只需構造函數內部的可見性,以便它所包含的程序集外部沒有其他類可以看到它。
大會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();
然後你就可以實例化的組件中的這個類(通過你的工廠),但它不能在組件外部被實例化。
Damnit,我討厭它,當「1個新答案已發佈」彈出xD +1 – Sean