大佬教程收集整理的这篇文章主要介绍了属性永远不为null#,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
private String _property = String.Empty; public String Property { set { _property = value ?? String.Empty); } }
if (_property != null) { //... }
假设_property仅由Property的setter设置,这个代码是多余的吗?
确实,这是多余的.这是Properties的实际目的.我们不应该直接访问类的字段.我们应该使用Property访问它们.所以在相应的setter中,我们可以嵌入任何逻辑,我们可以保证每次我们尝试设置一个值时,这个逻辑将再次被验证.这个参数甚至适用于类的方法.在方法中,我们必须使用属性而不是实际字段.此外,当我们想要读取字段的值时,我们应该使用相应的getter.
通常,属性增强了封装的概念,封装是面向对象编程OOP的支柱之一.
很多时候,当我们想要设置一个值时,没有任何逻辑应该应用.以下面的例子为例:
public class Customer { public int id { get; set; } public String FirstName { get; set; } public String LastName { get; set; } }
我们已经宣布了一个代表客户的类. Customer对象应具有三个属性:Id,FirstName和LastName.
一个直接的问题,当有人读这个类时,为什么有人会在这里使用属性?
答案是同样的,它们提供了封装机制.但是让我们考虑一下从长远来看这对我们有什么帮助.假设有一天有人决定客户的名字应该是长度小于20的字符串.如果上面的类声明如下:
public class Customer { public int id; public String FirstName; public String LastName; }
那么我们应该在我们创建的每个实例中检查FirstName的长度!否则,如果我们选择了属性声明,我们可以轻松地使用Data Annotations
public class Customer { public int id { get; set; } [StringLength(20)] public String FirstName { get; set; } public String LastName { get; set; } }
就是这样.另一种方法可能如下:
public class Customer { public int id { get; set; } private String firstName; public String FirstName { get { return firstName } set { if(value!=null && value.length<20) { firstName = value; } else { throw new Argumentexception("The first name must have at maxium 20 characters","value"); } } } public String LastName { get; set; } }
以上是大佬教程为你收集整理的属性永远不为null#全部内容,希望文章能够帮你解决属性永远不为null#所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。