代码比较 - 哪个更好或更不必要?

时间:2012-02-05 20:08:47

标签: c#

  

可能重复:
  Difference between Property and Field in C#

public class Test
{
    public bool testData1;
    public string testData2;
}

public class Test
{
    public bool TestData1 { get; set; }
    public string TestData2 { get; set; }
}

public class Test
{
    private bool testData1;
    private string testData2;

    public bool TestData1 { get { return testData1; } set { testData1 = value; } }
    public string TestData2 { get { return testData2; } set { testData2 = value; } }
}

哪种优化代码更好或更不必要?为什么?

这不是最后一个包含很多不必要的数据吗?

=======编辑:

我认为在那种情况下:

public class Test
{
    public Test(bool testData1)
    {
         this.testData1 = testData1;
    }
    private bool testData1;

    public bool TestData1 { get { return testData1; } }
    public string TestData2 { get; set; }
}

需要在后台填写字段。不是吗?

5 个答案:

答案 0 :(得分:8)

你不应该有公共字段,而是使用属性,这样你就可以在必要时更改内部实现 - 所以2)获胜。 3)正是auto properties如何在引擎盖下实现,所以相当于2)

答案 1 :(得分:5)

第二个是等效的。说同样的事情的语法不同。

第一个是不同的 - 它暴露了字段,而不是属性。网络上的字段和属性之间的差异已经被广泛报道。

答案 2 :(得分:2)

第二和第三是相同的。首先是不好的,因为如果你改变某些东西(名字,类型),那么你就破坏了类接口。

答案 3 :(得分:2)

第一个例子在语义上与其他两个例子不同。

在第一个示例中,您使用的是字段而不是属性。

第二个例子相当于第三个例子;编译器将自己生成支持字段。所以,第二个例子更容易阅读和更清洁。

关于您的编辑问题: 没有必要。你可以完美地做到这一点:

public class MyClass
{

    MyClass( bool x )
    {
       TestData1 = x;
    }

    public bool TestData1
    {
       get;
       private set;
    }
}

答案 4 :(得分:2)

在生产代码中使用第一名应该是不可能的,因为拥有公共字段是封装使用不当的明确信号。

数字2和3是相似的,但有一个重要区别:如果你打算序列化你的类,你应该更喜欢#3,因为你可以更严格地控​​制你可以序列化的变量。除此之外,#2和#3是相同的。我总是从#2开始,只在必要时才进入#3。