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;
    }
}
阅读 2.3k
1 个回答

只有公共的那个构造方法同时初始化了三个字段,其他几个构造方法内只初始化个别字段,并没有全部初始化一遍的代码。

前一个写法里面每个构造方法里面都会对三个字段进行初始化,所以完全相同的初始化代码重复了好几次。

其实这就相当于我们平时把几个函数中都会用到的逻辑提取成一个独立的函数,供其他函数调用,从而减少了重复代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进