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; }
}
需要在后台填写字段。不是吗?
答案 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。