这两者有什么区别?
class Class1 { public int a = 1; } class Class2 { public int a; public Class2() { a = 1; } }
解决方法
在您的具体示例中,字段初始值设定项(Class1)很好.可以说,不公平的是公共领域; p我会建议:
// manually implemented property with field-initializer private int a = 1; public int A { get { return a;} set { a = value;} }
要么:
// automatically implemented property with constructor-based initialization public int A {get;set;} public Class1() { A = 1; }
@hvd’s answer正确地说明了差异.为了说明这可以给出不同结果的具体示例,请参阅以下内容.这个例子的主要收集消息实际上是“在使用构造函数的虚方法时非常小心”.
输出第一:
Class1: 1 Class2: 0
码:
using System; abstract class SomeBaseClass { protected abstract void Write(); protected SomeBaseClass() { Console.Write(GetType().Name + ": "); Write(); } } class Class1 : SomeBaseClass { protected override void Write() { Console.WriteLine(a); } public int a = 1; } class Class2 : SomeBaseClass { protected override void Write() { Console.WriteLine(a); } public int a; public Class2() { a = 1; } } static class Program { static void Main() { new Class1(); new Class2(); } }