C#中使用与C++委托构造函数类似的方法初始化字段默认值有什么好处?

发布于 2022-09-11 15:29:04 字数 920 浏览 13 评论 0

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

英雄似剑 2022-09-18 15:29:04

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文