C#属性:如何使用没有私有字段的自定义设置属性?

Pet*_*rdk 76 c# properties

我想做这个:

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用自动生成的私有字段?
或者我需要以这种方式实现它:

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 91

一旦你想在getter或setter中做任何自定义操作,你就不能再使用自动属性了.


小智 30

你可以尝试这样的事情:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}
Run Code Online (Sandbox Code Playgroud)

  • +1在我看来,这个答案谴责了接受的答案.它正在使用自动属性.它明确地将setter设置为private.这是一件好事,因为它让最终用户或开发人员知道setter方法背后可能会有更多的事情发生. (6认同)
  • @SidhinSTomas 不提供“私有集”将阻止该属性由其类的成员设置;它将是严格只读的。您只能在构造函数中设置其数据。 (4认同)

Fem*_*ref 14

这是不可能的.自动实现的属性或自定义代码.


Col*_*ury 6

从C#7开始,您可以对属性getset访问器使用表达式主体定义。

在这里查看更多

private string _name;

public string Name
{
    get => _name;
    set
    {
        DoSomething();
        _name = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 仍然使用私有字段。并没有真正帮助OP。 (4认同)

Jef*_*tes 5

要求您根据情况完全实施它。双方getset必须是自动实现或完全实行起来,而不是两者的结合。