C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了属性永远不为null#大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在重构代码时,我想出了如下的实例

private String _property = String.Empty;
public String Property
{
    set { _property = value ?? String.Empty); }
}

稍后在一个方法中我看到以下内容

if (_property != null)
{
    //...
}

假设_property仅由Property的setter设置,这个代码是多余的吗?

我有没有办法,通过反射魔法或其他方法_property可以为空?

解决方法

确实,这是多余的.这是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,请注明来意。