构造函数

任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活便于阅读的代码。

如果没有为对象提供构造函数,默认情况下C#将创建一个构造函数,该构造函数实例化对象,并将所有成员变量设置为此处列出的默认值。静态类和结构也可以有构造函数。

使用构造函数

构造函数具有与类相同的名称,它通常初始化新对象的数据成员。

不带参数的构造函数称为“默认构造函数”。无论何时,只要使用new运算符实例化对象,并且不为new提供任何参数,就会调用默认构造函数。

除非类是static的,否则C#编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。

类和structs都可以定义具有参数的构造函数。带参数的构造函数必须通过new语句或base语句来调用。类和structs还可以定义多个构造函数,并且二者均不需要定义默认构造函数。

ExpandedBlockStart.gif
public   class  Employee
{
    
public   int  salary;

    
public  Employee( int  annualSalary)
    {
        salary 
=  annualSalary;
    }

    
public  Employee( int  weeklySalary,  int  numberOfWeeks)
    {
        salary 
=  weeklySalary  *  numberOfWeeks;
    }
}

// 此类可以使用下列语句中的任一个来创建:
Employee e1  =   new  Employee( 30000 );
Employee e2 
=   new  Employee( 500 52 );

// 构造函数可以使用base关键字来调用基类的构造函数:
public   class  Manager : Employee
{
    
public  Manager( int  annualSalary)
        : 
base (annualSalary)
    {
        
// Add further instructions here.
    }
}

 

这里,基类的构造函数在执行构造函数块之前被调用。base 关键字可带参数使用,也可不带参数使用。构造函数的任何参数都可用作 base 的参数,或用作表达式的一部分。
在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。这意味着下面的构造函数声明在效果上是相同的:

public  Manager( int  initialdata)
{
    
// Add further instructions here.
}

public  Manager( int  initialdata) :  base ()
{
    
// Add further instructions here.
}

 

如果基类没有提供默认构造函数,派生类必须使用base显式调用基构造函数。

 

构造函数可以使用this关键字调用同一对象中的另一构造函数。和base一样,this可带参数使用也可不带参数使用,构造函数中的任何参数都可用作this的参数,或者用作表达式的一部分,如:

ExpandedBlockStart.gif
// 上面的构造函数:
public  Employee( int  weeklySalary,  int  numberOfWeeks)
    {
        salary 
=  weeklySalary  *  numberOfWeeks;
    }
// 可以被改写成:
public  Employee( int  weeklySalary,  int  numberOfWeeks)
    : 
this (weeklySalary  *  numberOfWeeks)
{
}
// this关键字导致此构造函数被调用:
public  Employee( int  annualSalary)
{
    salary 
=  annualSalary;
}

 

实例构造函数:

实例构造函数用于创建和初始化实例。创建新对象时将调用类构造函数。

私有构造函数:

私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则不允许其他类(除了嵌套类)创建该类的实例。

如果不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用private修饰符来清楚地表明该类不能被实例化。

ExpandedBlockStart.gif private
public   class  Counter
{
    
private  Counter() { }
    
public   static   int  currentCount;
    
public   static   int  IncrementCount()
    {
        
return   ++ currentCount;
    }
}

class  TestCounter
{
    
static   void  Main()
    {
        
//  Counter aCounter = new Counter();    //  Error
        Counter.currentCount  =   100 ;
        Counter.IncrementCount();
        System.Console.WriteLine(
" New count: {0} " , Counter.currentCount);
    }
}
//输出:New count: 101

 

静态构造函数:

静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

静态构造函数既没有访问修饰符,也没有参数。

无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。

 

为结构声明默认的构造函数是错误的,因为每一个值类型都隐式具有一个公共的默认构造函数。可以在结构类型上声明参数化构造函数以设置其初始值,但是,只有在需要默认值之外的值时才必须这样做。

转载于:https://www.cnblogs.com/niuniu1985/archive/2010/05/12/1732638.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值