C#学习 7 构造函数和构析函数

构造函数

class MyClass
{
   public MyClass() 
   {
      // code
      //这是类的默认构造函数,因为是公共的,所以类的对象可以用这个构造函数来实例化
   }
}

class MyClass
{
   private MyClass()
   {
      // code
      //这是类的私有的默认构造函数,不能用这个构造函数创建该类的对象实例(是不可创建的)
   }
}

也可以给类添加非默认的构造函数

class MyClass
{
   public MyClass() 
   {
      // code
   }
   public MyClass(int intVal) 
   {
      //这是非构造的默认函数
   }
}

构造函数的执行序列

public class MyBaseClass
{
   public MyBaseClass() 
   {
      // code
   }
   public MyBaseClass(int i) 
   {
      
   }
}

public class MyDerivedClass : MyBaseClass
{
   public MyDerivedClass() 
   {
      // code
   }
   public MyDerivedClass(int i) 
   {
      
   }
    public MyDerivedClass(int i, int j) 
   {
      
   }
}

如果这样实例化:MyDerivedClass myObj = new MyDerivedClass();
那构造函数的执行顺序如下:
System.Object.Object();
MyBaseClass.MyBaseClass();
MyDerivedClass.MyDerivedClass();

如果这样实例化:MyDerivedClass myObj = new MyDerivedClass(4);
那构造函数的执行顺序如下:
System.Object.Object();
MyBaseClass.MyBaseClass();
MyDerivedClass.MyDerivedClass(int i);

如果这样实例化:MyDerivedClass myObj = new MyDerivedClass(4,8);
那构造函数的执行顺序如下:
System.Object.Object();
MyBaseClass.MyBaseClass();
MyDerivedClass.MyDerivedClass(int i, int j);

而用base可以在实例化过程指定使用基类中具有指定参数的构造函数

public class MyDerivedClass : MyBaseClass
{
   public MyDerivedClass()  : base(5)
   {
   }
   ……
}

那这段代码的构造函数的执行顺序如下:
System.Object.Object();
MyBaseClass.MyBaseClass(int i);
MyDerivedClass.MyDerivedClass();

除了base之外,还可以用this作为构造函数初始化器。它指定在调用指定的构造函数前,对当前类使用非默认的构造函数:

public class MyDerivedClass : MyBaseClass
{
   public MyDerivedClass() : this(5, 6)
   {
      // code
   }

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

如果这样实例化:MyDerivedClass myObj = new MyDerivedClass();
那构造函数的执行顺序如下:
System.Object.Object();
MyBaseClass.MyBaseClass(int i);
MyDerivedClass.MyDerivedClass(int i, int j);
MyDerivedClass.MyDerivedClass();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值