当前位置: 首页 > 编程语言 > C#

私有成员实例化-初始化的最佳实践是什么?分享

时间:2023-04-10 11:40:47 C#

私有成员实例化/初始化的最佳实践是什么?可能重复:C#成员变量初始化;最佳实践?这样做有什么好处:publicclassRemotingEngine{uintm_currentValueId;对象m_lock;publicRemotingEngine(){m_currentValueId=0;m_lock=新对象();}对比这个:publicclassRemotingEngine{uintm_currentValueId=0;对象m_lock=新对象();我一直在避免第二种,因为它感觉“脏”。它显然减少了打字,所以这对我很有吸引力。它可以改变继承情况。有关对象初始化顺序的链接:http://www.csharp411.com/c-object-initialization/派生静态字段派生静态构造函数派生实例字段基静态字段基静态构造函数基实例字段基实例构造函数派生实例构造函数所以如果这是一个派生类,整个基对象在派生字段初始化和构造函数运行之间被初始化。区别不大,我会保留第一个,因为它更具可读性。通常变量是在类的顶部定义的,我可以去那里检查它们的默认值,而不是搜索构造函数并查看它是否设置了它。就编译器而言,除非您有多个构造函数,否则没有区别。出于这个原因,我总是使用第一个:构造函数负责初始化变量。不同的构造函数可以不同地初始化变量。所以是的,你应该觉得第二种方式很脏=)。我更喜欢第二种,在某些情况下这取决于你的编码标准。但是考虑一下处理的顺序:目标类字段初始化->基类字段初始化->基类构造函数->目标类构造函数finalized时有值,可能会导致一些意想不到的问题。另请参阅此博客,BillSimserBestPracticesandMemberInitializationinC#对于int,您根本不需要这样做,内部类型被初始化为default()-对于int,它是0。至于对象,它是一个品味问题。我更喜欢前者。如果有人覆盖了我的构造函数,我希望他们调用base()来构造它的正确状态。您希望避免在构造函数范围之外进行实例化,因为它显示了意图,尤其是如果您重写构造函数,您将拥有更大的灵活性。就IL而言,它们是相同的。编译器转向:classFoo{intbar=1;}进入这个:classFoo{intbar;publicFoo(){this.bar=1;}}即使您像这样自己添加构造函数:classFoo{intbar=1;publicFoo(intbar){this.bar=bar;}}编译器将其转换为:classFoo{intbar;publicFoo(intbar){this.bar=1;这个.bar=bar;我对此有不同的看法。我认为你应该抽象属性并在构造函数中设置它们。使用自动属性基本上消除了这个问题,因为你不能初始化它们(除了默认值之外的任何东西)。以上是C#学习教程:私有成员实例化/初始化的最佳实践是什么?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicclassRemotingEngine{privateuintCurrentValueID{get;放;}privateobjectLock{get;放;}publicRemotingEngine(){this.CurrentValueID=0;//没必要...this.Lock=newobject();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: