我的代码有问题。我终于得到它所以没有错误,但现在我必须处理stackoverflow ...
有人可以告诉我我的代码有什么问题吗?
public Matrix Projection
{
get { return Projection; }
protected set
{
Projection = value;
generateFrustum();
}
}
如果你能帮忙的话会很好!
感谢
答案 0 :(得分:24)
您的set方法自行调用:Projection = value
。
private Matrix _projection = null;
public Matrix Projection
{
get { return _projection; }
protected set
{
_projection = value;
generateFrustum();
}
}
使用以下表格时:
public Matrix Projection { get; set }
您不需要指定变量来存储实际值,但是当您明确实现get或set时,您应该声明其他变量并在get,set implementation中使用它。
答案 1 :(得分:4)
您正在get
和set
函数中定义无限递归。
get { return Projection; }
相当于:
get { return get();}.
答案 2 :(得分:4)
属性的setter和getter实现为方法(get_X和set_X)。
在Projection的设置器中编写Projection = value
会导致从set_Projection()
内对set_Projection()
进行递归调用。 (这同样适用于get_Projection()
。)
由于调用没有条件,递归是无限的。
对于public T PropA { get; set; }
,它是糖语法:
private T _PropA;
public T PropA
{
get
{
return _PropA;
}
set
{
_PropA = value;
}
}
你应该做的是:
private Matrix _projection;
public Matrix Projection
{
get
{
return _projection;
}
protected set
{
// Make sure that Matrix is a structure and not a class
// override == and != operators in Matrix (and Equals and GetHashCode)
// If Matrix has to be a class, use !_project.Equals(value) instead
// Consider using an inaccurate compare here instead of == or Equals
// so that calculation inaccuracies won't require recalculation
if (_projection != value)
{
_projection = value;
generateFrustum();
}
}
}
答案 3 :(得分:0)
public T PropA { get; set; }
实际上是
的语法T _PropA; public T PropA { get { return _PropA; } set { _PropA = value; } }
所以答案是
private Matrix _projection = null;
public Matrix Projection
{
get { return _projection; }
protected set
{
_projection = value;
generateFrustum();
}
}
您可以参阅以下示例了解更多信息
http://msdn.microsoft.com/en-us/library/ms228503.aspx
http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs.80).aspx