我现在正在上一门C#类,并且试图找出做事的最佳方法。我来自Java背景,因此只熟悉Java最佳实践。我是C#新手!
在Java中,如果我有私有财产,则可以这样做。
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
在C#中,我看到有很多方法可以做到这一点。
我可以像Java那样做:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
或者我可以这样:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
要么:
public string Name { get; set; }
我应该使用哪一种?每种方法有哪些警告或细微之处?创建类时,我遵循的是我从Java中学到的最佳常规(尤其是阅读Effective Java)。因此,例如,我赞成不变性(仅在必要时提供设置器)。我很好奇这些实践如何与C#中提供setter和getter的各种方式相适应;本质上,我如何将Java世界中的最佳实践转换为C#?
编辑
我将其发布为对乔恩·斯凯特(Jon Skeet)的回答的评论,但随后很长一段时间:
非平凡属性(例如,可能需要大量处理和验证)又如何呢?我是否仍可以通过公共属性公开它,但逻辑封装在get
和中set
?为什么要/应该通过拥有专用的setter和getter方法(以及相关的处理和验证逻辑)来做到这一点。