C# properties: how to use custom set property without private field?

我想这么做:

public Name
{
get;
set
{
dosomething();
??? = value
}
}

是否可以使用自动生成的私有字段?
Or is it required that I implement it this way:

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

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

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

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

你可以试试这样:

public string Name { get; private set; }
public void SetName(string value)
{
DoSomething();
this.Name = value;
}

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

See more here

private string _name;


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