zoukankan      html  css  js  c++  java
  • C#重载实例构造函数与构造函数初始化器(转)

    所谓方法重载就是让同一个方法带有不同参数列表。构造函数是指在创建类的对象时必须执行的一系列操作,他也可以被重载,在创建类时可以根据实际参数情况合理调用一个构造函数。这里就有一个问题了:如果每一个构造函数都要执行一些特定的操作,那我们不得不在每一个构造函数里面粘贴执行这些特定操作的代码,这就造成了代码的重复。

    解决办法是仅在缺省实例构造函数中放入这一段代码,让每个重载实例构造函数通过构造函数初始化器来调用它。

    : this ([<形参列表>])

    用法示例:

    class Account
    {
    private decimal balance;
    private decimal interestRate;
    private string holderName;

    public Account(decimal initialBalance, decimal initialInterestRate, string initialHolderName)
    {
    balance = initialBalance;
    interestRate = initialBalance;
    holderName = initialHolderName;
    }

    public Account(string initialHolderName)
    : this(0, 0, initialHolderName)
    {
    Console.WriteLine("Only initial holder name supplied.");
    }

    public Account()
    : this(0, 0, "Not assigned yet.")
    {
    Console.WriteLine("Note: no initial information supplied.");
    }
    }

    上例中,Account类的构造函数被重载,无论调用哪一个重载实例构造函数,下面这一段代码总被执行:

    public Account(decimal initialBalance, decimal initialInterestRate, string initialHolderName)
    {
    balance = initialBalance;
    interestRate = initialBalance;
    holderName = initialHolderName;
    }

    使用构造函数初始化器,其参数表达式有几点要注意:

    构造函数初始化器必须位于它的实例构造函数形式参数作用域之内,如;

    public Account(string initialHolderName)
    : this(0, 0, initialHolderName)

    是可行的,而下面

    public Account(string initialHolderName)
    : this(0, this.interestRate, initialHolderName)

    无效,this引用了一个实例变量,但在这里,任何对实例变量的引用是无效的,而且在这里不能使用this关键字。

    最后一点是,构造函数初始化器的参数列表不能与他所应用的实例构造函数的形式参数列表匹配,如下面的代码错误:

    class test

    {

    ...

    public test(int initialValue) : this (10) //无效,initialValue与10匹配

    {...}

    ...

    }

    错误的根本原因在于形成了一个无限自身调用链。

  • 相关阅读:
    c++文件对齐
    笔试题——C++开发简单记录错误模块
    dp算法之有代价的最短路径
    Linux虚拟机安装教程
    C++判断回文
    干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析
    干货 | 10分钟教你用column generation求解vehicle routing problems
    干货 | 10分钟带你彻底了解column generation(列生成)算法的原理附java代码
    干货 | 10分钟搞懂branch and bound(分支定界)算法的代码实现附带java代码
    干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇
  • 原文地址:https://www.cnblogs.com/y5042/p/2173691.html
Copyright © 2011-2022 走看看