关于C#派生类调用基类构造函数的理解

(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数
(2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数

Java代码 复制代码
  1. public class MyBaseClass   
  2.    {           
  3.        public MyBaseClass() { }   
  4.        public MyBaseClass(int i)   
  5.        {   
  6.   
  7.            Console.WriteLine("我是基类带一个参数的构造函数");   
  8.   
  9.        }   
  10.   
  11.    }   
  12.   
  13.    public class MyDerivedClass : MyBaseClass   
  14.    {   
  15.          
  16.   
  17.        public MyDerivedClass()   :         {   
  18.   
  19.            Console.WriteLine("我是子类无参构造函数");   
  20.   
  21.        }   
  22.   
  23.        public MyDerivedClass(int i)         {   
  24.   
  25.            Console.WriteLine("我是子类带一个参数的构造函数");   
  26.   
  27.        }   
  28.   
  29.        public MyDerivedClass(int i, int j)         {   
  30.   
  31.            Console.WriteLine("我是子类带二个参数的构造函数");   
  32.   
  33.        }   
  34.   
  35.    }   
  36.   
  37.    class Program   
  38.    {   
  39.        static void Main(string[] args)   
  40.        {   
  41.            MyDerivedClass m = new MyDerivedClass();   
  42.        }   
  43.    }  
 public class MyBaseClass
    {        
        public MyBaseClass() { }
        public MyBaseClass(int i)
        {

            Console.WriteLine("我是基类带一个参数的构造函数");

        }

    }

    public class MyDerivedClass : MyBaseClass
    {
       

        public MyDerivedClass()   :         {

            Console.WriteLine("我是子类无参构造函数");

        }

        public MyDerivedClass(int i)         {

            Console.WriteLine("我是子类带一个参数的构造函数");

        }

        public MyDerivedClass(int i, int j)         {

            Console.WriteLine("我是子类带二个参数的构造函数");

        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            MyDerivedClass m = new MyDerivedClass();
        }
    }


(3)在基类中有自己编写的构造函数并且在基类中没有添加无参的构造函数时,要在派生类中是用Base指定基类的构造函数

Java代码 复制代码
  1. public class MyBaseClass   
  2.    {           
  3.      public MyBaseClass(int i)   
  4.        {   
  5.   
  6.            Console.WriteLine("我是基类带一个参数的构造函数");   
  7.   
  8.        }   
  9.   
  10.    }   
  11.   
  12.    public class MyDerivedClass : MyBaseClass   
  13.    {   
  14.          
  15.   
  16.        public MyDerivedClass()   : base(1)//使用Base指定基类中的构造函数   
  17.        {   
  18.   
  19.            Console.WriteLine("我是子类无参构造函数");   
  20.   
  21.        }   
  22.   
  23.        public MyDerivedClass(int i)  : base(i)   
  24.        {   
  25.   
  26.            Console.WriteLine("我是子类带一个参数的构造函数");   
  27.   
  28.        }   
  29.   
  30.        public MyDerivedClass(int i, int j) : base(i)   
  31.        {   
  32.   
  33.            Console.WriteLine("我是子类带二个参数的构造函数");   
  34.   
  35.        }   
  36.   
  37.    }   
  38.   
  39.    class Program   
  40.    {   
  41.        static void Main(string[] args)   
  42.        {   
  43.            MyDerivedClass m = new MyDerivedClass();   
  44.        }   
  45.    }  
 public class MyBaseClass
    {        
      public MyBaseClass(int i)
        {

            Console.WriteLine("我是基类带一个参数的构造函数");

        }

    }

    public class MyDerivedClass : MyBaseClass
    {
       

        public MyDerivedClass()   : base(1)//使用Base指定基类中的构造函数
        {

            Console.WriteLine("我是子类无参构造函数");

        }

        public MyDerivedClass(int i)  : base(i)
        {

            Console.WriteLine("我是子类带一个参数的构造函数");

        }

        public MyDerivedClass(int i, int j) : base(i)
        {

            Console.WriteLine("我是子类带二个参数的构造函数");

        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            MyDerivedClass m = new MyDerivedClass();
        }
    }



注: 初始化的顺序是从基类到派生类。初始化时首先会调用基类的构造函数初始化基类,然后调用派生类的构造函数初始化派生类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值