Lin*_*Lin 3 c# constructor design-patterns private
我有一个班级A和一个班级AStore.我的要求是阻止所有其他方法初始化类的实例A,他们应该从中获取实例AStore.另外,我还需要A从实例访问成员函数.
工厂模式不适合这个问题,因为构造函数A仍然是公共的.理想情况下,在调用类的构造函数时,它应该抛出编译错误,A同时可以访问其成员函数.
我可以获得C#解决方案吗?
为了限制其他人创建类A的实例,您可以使用私有构造函数和静态工厂方法来获取该类的实例.
public class A
{
private A(){}
public static A GetInstance()
{
return new A();
}
public void MemberFunctionOfA()
{
// blah blah...
}
}
Run Code Online (Sandbox Code Playgroud)
要仅通过Astore实施A的实例创建,您可以使用protected modifier并从A派生AStore.这样,只有AStore才能访问受保护的成员,如'constructor'或'factory method':
public class Astore : A
{
public A GetInstanceOfA()
{
return base.GetInstance();
}
}
public class A
{
protected A() { }
protected A GetInstance()
{
return new A();
}
public void MemberFunctionOfA()
{
// blah blah...
}
}
//Usage
public class ConsumerClass
{
public void Test()
{
var a = new A(); // Compile error
a = new Astore().GetInstanceOfA();
a.MemberFunctionOfA();
}
}
Run Code Online (Sandbox Code Playgroud)
但是仍然有可能另一个班级说'UnWantedStore'可以从A派生并且服务A的实例.