0

我的班级中有这个属性:

public string A
{
    set
    {
        A = value;
    }
}

每当我尝试为 A 赋值时,它都会给我一个错误。实际上,我的 IIS Express 停止并且没有给出任何线索。

我有一种感觉,这为 A 创造了一个无休止的价值分配,就像一个递归。我的问题:

  1. 我的代码中发生了什么?
  2. 指定实现时,属性只是访问器(getter/setter)而不是容器吗?
  3. 使用自动实现的属性时,该属性是容器还是访问器?
4

3 回答 3

2

您将遇到 StackOverflow 异常,因为您在其设置器中分配属性本身,这会导致无休止的分配。

于 2013-07-31T06:47:39.173 回答
1

当您使用自动实现的属性时,编译器会为值和方法生成一个容器以使用该容器(获取和设置)。

当您像您一样自己实现适当性时,编译器仅生成一个 set 方法,然后调用自身,从而导致无限循环。正确的做法是:

private string _a;
public string A
{
    set
    {
        _a = value;
    }
}

在这种情况下,编译器会生成一个方法来设置 的值_a,并且不会发生递归。

于 2013-07-31T06:52:49.980 回答
1

您不能将属性变量本身设置为容器..您可以这样写。

场景一:

public string A
{
    set;
}

场景二:

private string _A=String.Empty;
public string A
{
    set{_A=value;}
}

如果有任何问题,请告诉我。

于 2013-07-31T06:49:57.587 回答