我的班级中有这个属性:
public string A
{
set
{
A = value;
}
}
每当我尝试为 A 赋值时,它都会给我一个错误。实际上,我的 IIS Express 停止并且没有给出任何线索。
我有一种感觉,这为 A 创造了一个无休止的价值分配,就像一个递归。我的问题:
- 我的代码中发生了什么?
- 指定实现时,属性只是访问器(getter/setter)而不是容器吗?
- 使用自动实现的属性时,该属性是容器还是访问器?
我的班级中有这个属性:
public string A
{
set
{
A = value;
}
}
每当我尝试为 A 赋值时,它都会给我一个错误。实际上,我的 IIS Express 停止并且没有给出任何线索。
我有一种感觉,这为 A 创造了一个无休止的价值分配,就像一个递归。我的问题:
您将遇到 StackOverflow 异常,因为您在其设置器中分配属性本身,这会导致无休止的分配。
当您使用自动实现的属性时,编译器会为值和方法生成一个容器以使用该容器(获取和设置)。
当您像您一样自己实现适当性时,编译器仅生成一个 set 方法,然后调用自身,从而导致无限循环。正确的做法是:
private string _a;
public string A
{
set
{
_a = value;
}
}
在这种情况下,编译器会生成一个方法来设置 的值_a
,并且不会发生递归。
您不能将属性变量本身设置为容器..您可以这样写。
场景一:
public string A
{
set;
}
场景二:
private string _A=String.Empty;
public string A
{
set{_A=value;}
}
如果有任何问题,请告诉我。