c#属性setter body而不声明类级属性变量

wha*_*ean 10 c# properties

我是否需要声明一个类级变量来保存属性,或者我可以self.{propertyname}在getter/setter中引用它?

换句话说,我可以这样做吗?(我没有mongoFormId在任何地方定义):

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

p.s*_*w.g 17

您可以使用自动访问器实现自己的访问器.如果使用自动访问器,C#编译器将为您生成一个支持字段,但如果您实现自己的支持字段,则必须手动提供支持字段(或以其他方式处理该值).

private string _mongoFormId;

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

更新:自从提出这个问题以来,C#6.0已经发布.但是,即使使用新的语法选项,仍然无法提供自定义setter主体,而无需显式声明支持字段.


Jus*_*now 5

如果您要使用自定义 getter 和 setter,则需要设置一个字段变量并将值存储在那里。

使用您现在拥有的代码,您将遇到堆栈溢出异常。当您将某些内容分配给 时mongoFormId,您将执行该行this.MongoFormId = value;。这是对 的赋值mongoFormId,导致执行该行this.MongoFormId = value;,依此类推。它永远不会停止。

正确的方法是一个字段:

    private string _mongoFormId;
    public string mongoFormId {
        get { return this._mongoFormId; }
        set {
            this._mongoFormId = value;
            revalidateTransformation();
        }
    }
Run Code Online (Sandbox Code Playgroud)