C# C语言中的堆栈溢出#
我有一个寄存器,用于注册我需要的所有对象:C# C语言中的堆栈溢出#,c#,.net,C#,.net,我有一个寄存器,用于注册我需要的所有对象: public static class ObjectRegister { public static List<IObject> RegisteredObjects = new List<IObject>(); static ObjectRegister() { RegisteredObjects.Add(new Object1()); RegisteredObjects.
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 Object1(parametar newParam)
{
this.param = newParam;
}
它会在此行上保持trowing 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);
}
}
在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; }
此外,我强烈建议您开始关注,并注意类型和成员名称的拼写
因此,您可能希望您的类被称为
Parameter
——尽管就个人而言,我至少会尝试让它更具描述性,例如QueryParameter
或类似的东西。同样地,Object1
也不是一个语义上有意义的名称-我希望它不是您真实代码中的名称。您需要显示Object1类的代码。您真的有一个名为parametar
的类吗?code
公共类Object1:ioobject{public parametar param{get{返回this.param;}设置{this.param=value;}}内部Object1(){}公共Object1(parametar newParam){this.param=newParam;}公共bool测试(parametar param){//我在这里对参数执行propper检查,并返回结果}public IObject CreateInstance(parametar param){return new Object1(param);}code
@user1064633:不要在注释中包含代码-将其放入问题中。理想情况下,发布一个简短但完整的程序来演示问题。Thanx:)这就是问题所在
public parameter param { get; set; }
private parametar param;
public parametar Param { get { return param; } set { param = value; }