什么是 C# 中的属性访问器递归?

0 .net c# class software-design .net-core

什么是 C# 中的属性访问器递归?我看到有关如何解决它的文章,但想要它是什么的纯技术定义。

有关如何解决它的资源:

c# 属性设置器主体,无需声明类级属性变量

Gab*_*uci 5

如果您将 getter 和 setter 视为方法(它们实际上是后台的方法 - C# 只是对您隐藏了它),则它会变得更加清晰。

  • 每当您检索属性的值时,您都在调用 get 方法
  • 每当你设置一个属性的值时,你就是在调用 set 方法

因此,如果您有一个如下所示的属性:

public string MyProperty {
    get {
        return this.MyProperty;
    }
    set {
        this.MyProperty = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这真的很像拥有这两种方法:

string get_MyProperty() {
    return get_MyProperty();
}

void set_MyProperty(string value) {
    set_MyProperty(value);
}
Run Code Online (Sandbox Code Playgroud)

您会注意到这两种情况都会导致无限递归,并以堆栈溢出结束。

所以不要那样做™

  • 部分问题(正如他之前的问题所证明的那样)是名称看起来相似,并且与普遍接受的 .NET 命名约定相反,因此很难识别哪个是属性,哪个是字段,更糟糕的是,当它是实际上引用的是相同的属性而不是支持字段。 (2认同)