我正在用C#开发一个Windows应用程序。在我的应用程序中,我使用了一个静态类。
以下是代码:
public static class clsNumber
{
private static object vValue;
public static object Value
{
get
{
return Value;
}
set
{
Value = value;
}
}
public static string HexValue
{
get
{
try
{
return Microsoft.VisualBasic.Conversion.Hex(vValue);
}
catch
{
return Convert.ToString(vValue);
}
}
set
{
Value = Microsoft.VisualBasic.Conversion.Val("&H" + value);
}
}
}
从另一个类中设置上述类的“HexValue”的值。以下是代码行:
iStick = sOutPut.Substring(0, 8);
clsNumber.HexValue = iStick;
在执行上面的代码行时,会出现以下错误:
"An unhandled exception of type 'System.StackOverflowException' occurred in <.....>.dll"
任何人都可以帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:10)
这里有一个非终止递归:
public static object Value
{
get
{
return Value;
}
set
{
Value = value;
}
}
getter中的行return Value
递归调用getter并导致堆栈溢出。同样适用于制定者。
我认为你的意思是:
public static object Value
{
get
{
return vValue;
}
set
{
vValue = value;
}
}
我看不出在这里使用明确命名的字段返回属性可以获得什么。我将删除vValue
并声明属性如下:
public static object Value { get; set; }
答案 1 :(得分:1)
2件事:
您忘记了已创建vValue字段。
不要使属性递归(除非确实需要,并且在一些迭代后可以解析)。在这里,您在Value属性中调用Value属性。
答案 2 :(得分:-2)
public static string HexValue
上面的行使用StringBuilder而不是string