定义属性的“新”方式是否还有其他好处或缺点?

时间:2009-04-08 14:03:15

标签: c# coding-style

处理属性的“新”,更短的方式是否有任何进一步的好处,除了更短的代码 - 如性能优势,更少的内存使用等?

书写

public string StrVariable { get; set;}

而不是

private string strVariable;

public string StrVariable
{
    set
    {
        strVariable = value;
    }
    get
    {
        return strVariable;
    }
}

是否有任何缺点 - 也许有人会认为代码可读,不那么明确?

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

特定情况下的一大缺点 - 您将失去对字段名称的控制权。这可能听起来微不足道,但如果您使用二进制序列化(通过BinaryFormatter),它可能is a big problem

其他事项:

  • 他们不能readonly在字段级别
  • 对于struct,您需要在自定义构造函数中调用: this()
然而,他们确实在99%的情况下做了出色的工作 - 他们整齐地表达了代码,同时可以在以后添加额外的实现细节(通过切换到显式字段)而不会破坏调用代码(除了点数)上文)。

答案 2 :(得分:0)

我可以看到的一个缺点是,如果你想在get / set例程中做其他事情。增加一个计数器或类似的东西。如果你还没有,可以验证输入。

答案 3 :(得分:0)

集合属性也是一个问题。它们未使用Autoproperties进行初始化。

示例:

public class foo
{
    public List<String> S1 { get; set; }

    private List<string> s = new List<string>();
    public List<String> S2
    {
        get { return s;}
        set { s = value; }
    }
}

foo f = new foo();
f.S1.Add("thing");
f.S2.Add("thing");

f.S1.Add将使用nullref异常进行炸弹。