代码比较-哪个更好,哪个不必要
本文关键字:不必要 更好 比较 代码 | 更新日期: 2023-09-27 18:23:37
可能重复:
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; }
}
需要在背景中具有字段。不是吗?
您不应该有公共字段,而是使用属性,这样您就可以在必要时稍后更改内部实现-因此2)获胜。3) 就是在引擎盖下实现自动属性的方式,因此相当于2)
后两者是等价的。只是说同样的话有不同的语法。
第一种不同——它公开字段,而不是属性。字段和属性之间的差异在网络上被报道得令人作呕。
第二个和第三个是相同的。首先是不好的,因为若您更改了某些内容(名称、类型),那个么就破坏了类接口。
在生产代码中使用数字1应该是不可能的,因为有公共字段肯定是封装使用不当的标志。
数字2和数字3是相似的,但有一个重要的区别:如果您计划序列化您的类,您应该更喜欢#3,因为您对可以序列化的变量有更严格的控制。除此之外,#2和#3是相同的。我总是从#2开始,只有在必要的时候才会选择#3。
第一个示例与其他两个示例在语义上不同。
在第一个示例中,您使用的是字段而不是属性。
第二个例子相当于第三个例子;编译器将自己生成支持字段。因此,第二个例子更容易阅读,而且imho更干净。
关于您编辑的问题:没必要。你完全可以做到这一点:
public class MyClass
{
MyClass( bool x )
{
TestData1 = x;
}
public bool TestData1
{
get;
private set;
}
}