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;
}
}