我有这个寄存器可以记录我需要的所有对象:
public static class ObjectRegister
{
public static List<IObject> RegisteredObjects = new List<IObject>();
static ObjectRegister()
{
RegisteredObjects.Add(new Object1());
RegisteredObjects.Add(new Object2());
RegisteredObjects.Add(new Object3());
}
}
接下来我有这个检查列表的函数,如果列表中的项目通过测试,它会创建一个对象实例并将其添加到列表中:
public static List<IObject> Scan(List<parametar> list)
{
List<IObject> neededObjects = new List<IObject>();
foreach (IObject registeredObject in ObjectRegister.RegisteredObjects)
{
foreach (parametar param in list)
{
if (registeredObject.Test(param)) //returns true or false
{
neededObjects.Add(registeredObject.CreateInstance(param));
}
}
}
return connectedObjects;
}
这是Object1的CreateInstace方法:
public IObject CreateInstance(parametar param)
{
return new Object1(param);
}
这是构造函数:
public Object1(parametar newParam)
{
this.param = newParam;
}
它不断在这一行上投掷StackOverflow异常:
this.param = newParam;
尝试了创建实例,默认构造函数,空对象等的所有可能性,但没有任何效果......任何想法?
感谢名单
编辑: Object1类的代码:
public class Object1: IObject
{
public parametar param
{
get { return this.param; }
set { this.param = value; }
}
internal Object1() { }
public Object1(parametar newParam)
{
this.param = newParam;
}
public bool test(parametar param)
{
// I do the propper checking of the param here, and return the result
}
public IObject CreateInstance(parametar param)
{
return new Object1(param);
}
}
答案 0 :(得分:9)
这是你的问题,在Object1:
public parametar param { get { return this.param; } set { this.param = value; }
该属性以递归方式调用自身 - 这正是您获得堆栈溢出的原因。不要那样做。相反,您可能要么想要一个自动实现的属性:
public parameter param { get; set; }
或使用私人支持字段:
private parametar param;
public parametar Param { get { return param; } set { param = value; }
此外,我强烈建议您开始关注.NET naming conventions,并注意拼写类型和成员名称。
所以你可能希望你的课程被称为Parameter
- 虽然我个人至少尝试使它更具描述性,例如: QueryParameter
或类似的东西。同样地,Object1
并不是一个语义上有意义的名称 - 我希望它不是真正的代码中的名称。