C#中使用与C++委托构造函数类似的方法初始化字段默认值有什么好处?
在CLR via C#一书中提到,调用公共初始化构造器能减少生成的代码(164页)。
下面的代码,书上说,由于有三个构造器,所以编译生成三次初始化m_x,m_s,m_d的代码,每个构造器一次。
class SomeType
{
private Int32 m_x = 5;
private String m_s = 'Hi';
private Double m_d = 3.14;
private Byte m_b;
public SomeType() { }
public SomeType( Int32 x) { }
public SomeType( String s) { ...; m_d = 10; }
}
而下面的代码使用了公共的初始化构造器减少了生成代码。请问,为什么这样会减少生成的代码?
公共的初始化构造器不是也会被调用三次么,那么还是会三次初始化m_x, m_s, m_d。
class SomeType
{
private Int32 m_x ;
private String m_s ;
private Double m_d;
private Byte m_b;
public SomeType() {
m_x = 5;
m_s = "Hi";
m_d = 3.14;
}
public SomeType( Int32 x) :this(){
m_x = x;
}
public SomeType( String s):this() {
m_s = s;
}
public SomeType( Int32 x,String s):this()
{
m_x = x;
m_s = s;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只有公共的那个构造方法同时初始化了三个字段,其他几个构造方法内只初始化个别字段,并没有全部初始化一遍的代码。
前一个写法里面每个构造方法里面都会对三个字段进行初始化,所以完全相同的初始化代码重复了好几次。
其实这就相当于我们平时把几个函数中都会用到的逻辑提取成一个独立的函数,供其他函数调用,从而减少了重复代码。