C#属性:如何在没有私有字段的情况下使用自定义集属性?

C#属性:如何在没有私有字段的情况下使用自定义集属性?,c#,properties,C#,Properties,我想这样做: public Name { get; set { dosomething(); ??? = value } } 是否可以使用自动生成的专用字段? 还是要求我以这种方式实施: private string name; public string Name { get { return name; } set { dosomething();

我想这样做:

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}
是否可以使用自动生成的专用字段?
还是要求我以这种方式实施:

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}

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

一旦您想在getter或setter中执行任何自定义操作,您就不能再使用自动属性。

根据您的场景,您需要完全实现它。
get
set
必须一起自动实现或完全实现,而不是两者的组合。

您可以尝试以下方法:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}
从C#7开始,可以对属性的
get
set
访问器使用表达式体定义


在这个问题上有很多很好的讨论:+1在我看来,这个答案反驳了公认的答案。它正在使用自动属性。它显式地将setter设置为private。这是一件好事,因为它让最终用户或开发人员知道setter方法背后可能还有更多的事情要做。这与根本没有设置有什么区别?@SidhinSThomas不提供
私有集
会阻止其类成员设置属性;它将严格为只读。您只能在构造函数中设置它的数据。不过仍然使用私有字段。这并不能真正帮助OP。虽然这很有效,但正如@TSmith所说,这不是OP想要的。
private string _name;

public string Name
{
    get => _name;
    set
    {
        DoSomething();
        _name = value;
    }
}