我有一个类 A
和一个类 AStore
。我的要求是防止所有其他方法初始化类 A
的实例,它们应该从 AStore
获取实例。另外,我还需要从实例中访问A
的成员函数。
工厂模式不适合这个问题,因为 A
的构造函数仍然是公共(public)的。理想情况下,在访问其成员函数的同时调用类 A
的构造函数时应该抛出编译错误。
我可以获得 C# 解决方案吗?
最佳答案
为了限制其他人创建类 A 的实例,您可以使用私有(private)构造函数和静态工厂方法来获取该类的实例。
public class A
{
private A(){}
public static A GetInstance()
{
return new A();
}
public void MemberFunctionOfA()
{
// blah blah...
}
}
要强制仅通过 Astore 创建 A 的实例,您可以使用 protected 修饰符并从 A 派生 AStore。这样,只有 AStore 才能访问其 protected 成员,如“构造函数”或“工厂方法”:
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();
}
}
但是另一个类“UnWantedStore”仍然有可能派生自 A 并提供 A 的实例。
关于c# - 如何在 C# 中访问其成员函数时防止调用一个类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984648/