这两者有什么区别?
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(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。