C#中的堆栈溢出
我有这个寄存器,可以记录我需要的所有对象:
public static class ObjectRegister { public static List RegisteredObjects = new List(); static ObjectRegister() { RegisteredObjects.Add(new Object1()); RegisteredObjects.Add(new Object2()); RegisteredObjects.Add(new Object3()); } }
接下来我有这个检查列表的函数,如果列表中的项目通过测试,它会创建一个对象实例并将其添加到列表中:
public static List Scan(List list) { List neededObjects = new List(); 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; }
它在这一行上不断抛出StackOverflowexception:
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); } }
这是你的问题,在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命名约定 ,并注意类型和成员名称的拼写。
所以你可能希望你的类被称为Parameter
– 虽然我个人至少试图让它更具描述性,例如QueryParameter
或类似的东西。 同样, Object1
并不是一个语义上有意义的名称 – 我希望它不是真实代码中的名称。
上述就是C#学习教程:C#中的堆栈溢出分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015050.html