关于c#:代码比较 – 哪个更好或更不必要?


Code comparison - Which is better or unnecessary?

本问题已经有最佳答案,请猛点这里访问。

0

1
2
3
4
5
public class Test
{
    public bool testData1;
    public string testData2;
}

1
2
3
4
5
public class Test
{
    public bool TestData1 { get; set; }
    public string TestData2 { get; set; }
}

2

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

最后一个不是有很多不必要的数据吗?

编辑:

我认为在这种情况下:

1
2
3
4
5
6
7
8
9
10
11
public class Test
{
    public Test(bool testData1)
    {
         this.testData1 = testData1;
    }
    private bool testData1;

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

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


您不应该有公共字段,而是使用属性,这样您可以在以后更改内部实现(如果必要的话),所以2)获胜。3)只是在引擎盖下实现汽车属性的方式,因此相当于2)


第二个是等价的。只是说同一件事的语法不同而已。

第一种是不同的——它公开字段,而不是属性。在网络上,字段和属性之间的差异已经令人恶心地被掩盖了。


在生产代码中使用第一个应该是不可能的,因为拥有公共字段是封装使用不佳的一个肯定标志。

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


第一个例子在语义上与另外两个不同。

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

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

关于您编辑的问题:不一定。你完全可以做到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyClass
{

    MyClass( bool x )
    {
       TestData1 = x;
    }

    public bool TestData1
    {
       get;
       private set;
    }
}

第二个和第三个是相同的。首先是坏的,因为如果您更改了某些内容(名称、类型),那么您就破坏了类接口。