C#自动实现的属性 - 使用内部类

时间:2016-03-12 12:09:25

标签: c#

我正在寻找有关使用自动实施属性的最佳做法的建议。

如果我不需要引用课堂内的财产,我总是使用它们。但是,如果我确实需要访问类中的属性,我习惯手动添加私有属性。

例如,如果我有一个名为Person的类,其中包含firstName和lastName属性,而且我从不必在类中操作该数据,我只会这样做:

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

但是,如果我需要对这些属性做一些事情,我会这样做:

public class Person
{
    private string _firstName;
    public string firstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }

    private string _lastName;
    public string lastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

    public void testMethod()
    {
        Debug.Print(_firstName + " " + _lastName);
    }

}

我的问题:这是好的做法吗?

1 个答案:

答案 0 :(得分:1)

不,这毫无意义。当您需要做的不仅仅是设置/获取支持字段时,您应该转移到完全实现的属性。

事实证明:

Debug.Print(FirstName + " " + LastName); //convention says use UpperCamel for props

绝对没问题,引入后备字段只会给代码带来不必要的噪音。

相反,如果您想要进行一些验证:

public string LastName
{
    get { return _lastName; }
    set { 
        if(value.Contains("!")){
            throw new Exception("names can't contain '!'");
        }
        _lastName = value; }
}

现在你有理由放弃自动实施的属性。

如果您只是想避免第二次查找的开销,请不要担心。这可能永远不会导致性能问题,如果确实如此,您将通过测量代码时序找到答案。试图以牺牲清晰度为代价编写最佳效率的代码是一个糟糕的目标,并导致狡猾的代码。每次都支持清晰度,当程序运行缓慢时,您可以返回并找出导致它的原因。研究已经证明,它很有可能不会成为你所期望的,所以尝试猜测并不是一种经济上的追求。