获取,设置和属性最佳实践。Java与C#
我会用其中的最后一个作为琐碎的属性。请注意,由于getter和setter都是公共的,因此我将其称为 公共 属性。
对于自动实现的属性,不变性会有些痛苦-您不能编写只有吸气剂的自动属性;您能找到的最接近的是:
public string Foo { get; private set; }
这并不是 真正的 不变……只是在课堂之外不变。因此,您可能希望使用一个 真实的 只读属性:
private readonly string foo;public string Foo { get { return foo; } }
您绝对不想写getName()和setName()。在 某些 情况下,编写Get /Set方法而不是使用属性是有意义的,特别是如果它们可能很昂贵并且您希望强调这一点时,尤其如此。但是,您希望对方法使用PascalCase的.NET命名约定,而且您也不想使用常规方法来实现像这样的琐碎属性-在这里,属性更加惯用了。
好了,我们终于有了适当的只读自动实现属性:
// This can only be assigned to within the constructorpublic string Foo { get; }
同样,对于只读属性,其 做 需要做一些工作,就可以使用会员浓郁的属性:
public double Area => height * width;解决方法
我现在正在上一门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中学到的最佳常规(特别是阅读EffectiveJava)。因此,例如,我赞成不变性(仅在必要时提供设置器)。我很好奇这些实践如何与C#中提供setter和getter的各种方式相适应。本质上,我如何将Java世界中的最佳实践转换为C#?
编辑
我将其发布为对乔恩·斯凯特(Jon Skeet)的回答的评论,但随后很长一段时间:
非平凡属性(即可能需要大量处理和验证)又如何呢?我是否仍可以通过公共属性公开它,但逻辑封装在getand中set?为什么/应该通过拥有专用的setter和getter方法(以及相关的处理和验证逻辑)来做到这一点。
相关文章:
1. python - scrapy获取网页指定内容,后翻到下一页继续,固定循环次数。。问题2. docker api 开发的端口怎么获取?3. javascript - easyui textbox绑定onchange事件不能获取最新的文本框的值4. 时间获取的不是0-6吗,条件是case1吗?如果不是条件又在哪里5. 昨天还能获取多表关联的数据今天就拿不到了6. 随机数 - php mysql 带查询条件 获取多条随机记录7. 大佬们 这段代码为什么能获取到用户名称!!!8. javascript - react如何获取offsetX?9. javascript - 如何通过web页获取手机设备ID(或其它唯一标识)?10. ThinkPHP 配置文件内容改变,程序中C函数获取一直是原来的值