对于C#构造函数的认识

构造函数可以分为静态构造函数跟构造函数,也可以分为有参数跟无参数这两类

静态构造函数只执行一次,前面用static来修饰,不能用访问修饰符来修饰,具体调用一般由.NET来控制,调用发生在类实例化以及静态成员的调用时,
构造函数则发生在new()中,这么说可能不是很确切,如果存在继承的关系

例如:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace 构造函数的执行顺序  
{  
    public class MyBaseClass  
    {  
        public MyBaseClass()  
        {  
            Console.Write("调用父类无参数的构造函数");  
        }  
  
        public MyBaseClass(int x)  
        {  
            Console.Write("调用父类一个参数的构造函数");  
        }  
    }  
  
  
    public class MyDerivedClass : MyBaseClass  
    {  
        public int age;  
        public static int age2;//只要类里存在静态变量。那么静态变量总是最先初始化的。  
  
        static MyDerivedClass() //既然要初始化静态变量,就要调用静态的构造函数。  
        {  
            age2 = 100;  
            Console.Write(age2);  
  
        }  
  
  
        public MyDerivedClass():this(5)  
        {  
            age = 101;  
            Console.WriteLine(age);  
        }  
  
  
        public MyDerivedClass(int i):base(i)  
        {  
            age = 102;  
            Console.WriteLine(age);  
        }  
  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            MyDerivedClass myder = new MyDerivedClass(); //输出100 ,"调用父类一个参数的构造函数",102,101  
            /* 
            执行顺序: 
            <1>:static MyDerivedClass()  
            <2>:public MyBaseClass(int x)  
            <3>:public MyDerivedClass(int i)  
            <4>:public MyDerivedClass() 
             
             
 
            public MyDerivedClass():this(5) 这个this(5),就表示在调用public MyDerivedClass()构造函数前,先调用当 
            前类中带一个参数的构造函数,即先调用public MyDerivedClass(int i) ,而MyDerivedClass类中存在一个静态变量, 
            静态变量肯定是最先被初始化的,所以最先被调用的就是静态构造函数 static MyDerivedClass()。 
  
         
            Console.ReadKey();  
        }  
    }  
}  
总结:
1.父类跟子类都有静态构造函数 .
子类静态->父类静态->父类构造->子类构造
2.父类构造调用了虚方法,子类重写了此虚方法,同时Base调用了父类虚方法.
父类构造->子类虚方法(重写屏蔽了父类的虚方法)->父类虚方法
3.子类无参构造函数调用时默认先调用父类无参构造函数,如果父类没有有参构造函数就会报错,这时就需要手动给子类的无参构造函数指定一个父类存在的构造函数,子类的构造函数也是如此,默认会去执行父类对应参数个数的构造函数,没有就会报错,因此需要手动指定.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值