【问题标题】:What is Property Accessor Recursion in C#?什么是 C# 中的属性访问器递归?
【发布时间】:2019-08-24 09:25:09
【问题描述】:

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

如何解决它的资源:

c# property setter body without declaring a class-level property variable

【问题讨论】:

    标签: c# .net class .net-core software-design


    【解决方案1】:

    如果您将 getter 和 setter 视为方法,那就更清楚了(它们实际上是后台的方法 - C# 只是对您隐藏了它)。

    • 每当您检索属性的值时,都会调用 get 方法
    • 每次设置属性值时,都会调用 set 方法

    所以如果你有一个看起来像这样的属性:

    public string MyProperty {
        get {
            return this.MyProperty;
        }
        set {
            this.MyProperty = value;
        }
    }
    

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

    string get_MyProperty() {
        return get_MyProperty();
    }
    
    void set_MyProperty(string value) {
        set_MyProperty(value);
    }
    

    您会注意到这两种情况都会导致无限递归,并以stack overflow 结束。

    所以不要那样做™

    【讨论】:

    • 部分问题(正如他之前的问题所证明的那样)是名称看起来相似并且与普遍接受的 .NET 命名约定相反,因此很难识别哪个是属性,哪个是一个字段,更糟糕的是,它实际上指的是同一个属性而不是支持字段。
    • 所以正确的方法就是使用 {get;set;} 来解决它?正确,似乎是标准做法
    • 嗨@madreflection 正确的命名约定是什么?我可以在代码中修复,谢谢
    • @MattSmith 只有在获取或设置值时不需要做任何其他事情时,这才是“正确的”。
    • @MattSmith:见General Naming Conventions
    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2011-03-03
    • 2010-10-11
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多