构造函数(一)

一、构造函数

构造函数,一种特殊的方法,用来在创建对象时初始化对象.

1、默认构造函数

我们在定义类时,如果没有显示的定义构造函数,那么类会有一个默认的无参数构造函数,例:
public class Father
{ }
Father f=new Father();//这里调用的就是默认的构造函数,但如果构造函数是protected或者private时则不一定能初始化了

2、自定义构造函数

当然,我们也可以自己定义构造函数,如果有自定义构造函数,那么则不会再有默认的构造函数,除非自己再定义,例:
public class Father
{             
     public Father(String str)             
     {          
          Console.WriteLine(str);     
     }
}
Father f1=new Father();  //这样是报错的,因为并没有无参数的构造函数
Father f2=new Father("初始化参数");   //这样使用是没有问题的
public class Father
{             
      public Father()             
      {         
           Console.WriteLine("无参数构造函数");     
      }             
      public Father(String str)             
      {          
           Console.WriteLine(str);     
      }
}
Father f1=new Father();  //这样就可以了
Father f2=new Father("初始化参数");   //这样使用是没有问题的
public class Father
{        
      public Father(String str)        
      { 
           Console.WriteLine(str);
      }
}
Father f1=new Father();  //这样是报错的,因为并没有无参数的构造函数
Father f2=new Father("初始化参数");   //这样使用是没有问题的
public class Father
{        
      public Father()        
      {
           Console.WriteLine("无参数构造函数");
      }        
      public Father(String str)        
      { 
           Console.WriteLine(str);
      }
}
Father f1=new Father();  //这样就可以了
Father f2=new Father("初始化参数");   //这样使用是没有问题的

3、静态构造函数

静态构造函数,用于初始化任何静态成员变量,或者用于执行仅需执行一次的操作,在初始化任何一个实例或者引用任何静态成员变量之前,将会自动调用静态构造函数
public class Father
{        
      static Father()        
      {
           Console.WriteLine("静态构造函数!只执行一次…"); 
      }        
      static void StaticMethod()        
      {
           Console.WriteLine("调用静态方法!");
      }
}
Father f1=new Father();    //这里执行一次静态构造函数下面就再也不执行了,总之,在第一次操作有关该类时会自动调用
Father f2=new Father();

4、构造函数和继承关系

1)、父类有非私有的无参数构造函数
public class Father
{       
      public Father()        
      { 
           Console.WriteLine("非私有的无参数构造函数"); 
      }       
      public Father(String str)        
      { 
           Console.WriteLine("非私有的有参数构造函数"); 
      }
}
public class Child:Father
{  }
Child c=new Child();
这样我们在定义子类时,可以不定义构造函数,默认会继承父类的无参数构造函数,当然,我们也可以自己再定义子类的构造函数,例如:
public class Child:Father
{        
     public Child(String str)        
     { 
          Console.WriteLine(str); 
     }    //这是重写父类的有参数构造函数,当然也可以调用父类的有参数构造函数
     public Child(String str):base(str)
     {  }
}
总结:对于父类的非私有的无参数的构造函数,子类可以隐示的继承,但是对于非无参数构造函数则必须显示的继承

2)、父类有私有的无参数构造函数
public class Father
{       
      private Father()        
      { 
            Console.WriteLine("私有的无参数构造函数"); 
      }       
      public Father(String str)        
      {    
            Console.WriteLine("非私有的有参数构造函数"); 
      }
}
//这时,如果我们定义的子类中没有构造函数,是报错的,因为无法隐示的继承父类私有的无参数构造函数,下面这个是编译不通过的
public class Child:Father
{   }
重写:这时,如果我们要继承父类,必须要调用父类中非私有的构造函数,下面是正确的:
public class Child:Father
{       
     public Child(String str):base(str)       
     {   }
}
3)、父类中没有无参数的构造函数
其实这种情况和第2种应该是类似的,不再详述!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值