zoukankan      html  css  js  c++  java
  • 为什么使用this构造器

    当一个类有多个构造函数的时候,常使用this构造器:

    public class SomeClass
    
    {
    
        public SomeClass()
    
        {
    
            //TODO:初始化一些字段
    
        }
    
        public SomeClass(string temp) : this()
    
        {
    
            //TODO:初始化另外一些字段
    
        }
    
    }
    

    在这里,为什么要使用this构造器呢?这事还要从字段的初始化说起。

     

    假设有这样的一个类,在声明字段的时候对字段进行了初始化。在客户端,通过该类的2个构造函数创建对象实例。

       class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                SomeClass sc = new SomeClass();
    
                SomeClass sc1 = new SomeClass("jack");
    
            }
    
        }
    
        public class SomeClass
    
        {
    
            private int _age = 20;
    
            private string _name = "darren";
    
            public SomeClass()
    
            {
    
            }
    
            public SomeClass(string name)
    
            {
    
                _name = name;
    
            }
    
        }
    

     

    反编译成IL代码为:
    10

    可见,每次调用类的构造函数都会对_age和_name字段进行初始化。是否可以把这重复的部分放到一个公共的地方呢?答案是可以的,可以把字段的初始化工作交给一个无参构造函数。修改如下:

     

       public class SomeClass
    
        {
    
            private int _age;
    
            private string _name;
    
            public SomeClass()
    
            {
    
                _age = 20;
    
                _name = "darren";
    
            }
    
            public SomeClass(string name) : this()
    
            {
    
                _name = name;
    
            }
    
        }
    

    11
    以上,在SomeClass的有参构造函数中,没有对_age和_name字段再次进行初始化,而是调用了SomeClass的无参构造函数,可见,使用this构造器避免了重复初始化字段。

  • 相关阅读:
    APIO dispatching
    奶牛抗议
    擦弹
    逃跑
    [Hnoi2016]网络
    [Ahoi2005]LANE 航线规划
    素数密度_NOI导刊2011提高(04)
    P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)
    洛谷P3396 哈希冲突(分块)
    洛谷P4332 [SHOI2014]三叉神经树(LCT)
  • 原文地址:https://www.cnblogs.com/darrenji/p/4036487.html
Copyright © 2011-2022 走看看