我有一个父类型,并且有一些继承自它的子类型。
我想确保只有一个父实例,也适用于所有子类型。父类型:
private static int _instanceCount = 0;
public ParentClass()
{
protected ParentClass() // constructor
{
_instanceCount++;
if (_instanceCount > 1)
throw new exception("Only one instance is allowed.");
}
}
示例子类:
private static int _instanceCount = 0;
public ChildClass() : ParentClass
{
public ChildClass() : base() // constructor
{
_instanceCount++;
if (_instanceCount > 1)
throw new exception("Only one instance is allowed.");
}
}
该解决方案适用于子类型,但是当它们调用基类构造函数时,我无法区分是否从其他类型调用基本构造函数,因此解决方案失败。
我怎样才能做到这一点?
答案 0 :(得分:2)
你应该能够判断你是否从这样的子类中调用:
if( this.GetType().Equals(typeof(ParentClass)) )
{
//we know we're not being called by a sub-class.
}
当然,您可以跳过在子类中递增计数的步骤,并且只在父类中执行...并且存在线程问题。
答案 1 :(得分:1)
听起来你想要Singleton的功能。
答案 2 :(得分:1)
可能有其他方法来处理你想要做的事情,例如使用单例,但是确保调用基础构造函数不会给你误报的一种方法是检查它的类型,例如:
protected ParentClass()
{
if (!GetType().Equal(typeof(ParentClass)))
{
// The child class has taken care of the check aleady
return;
}
}
答案 3 :(得分:0)