在对象创建的时刻,有一个方法自动执行。我们称这种方法为构造函数。语法上,C#构造函数与其所在的类名相同,而且不返回任何值(甚至void都不用写)。一个类可以:
1.没有构造函数。这种情况下C,#编译器会自动提供一个默认的构造函数,即没有任何参数的构造函数,默认构造函数都是公有的
2.有一个构造函数。这种情况下,总是调用这一个构造函数,编译器将不会提供默认构造函数。
3.有多个构造函数。多个构造函数以不同的签名式区分,使用时具体的选择采用方法重载的规则 。编译器将不会提供任何的默认构造函数。
总结以上各点可知,只要定义了至少一个构造函数,编译器就不会提供默认构造函数。
在结构中情况有所不同。因为不允许定义没有参数的构造函数。所以编译器始终会提供一个默认的构造函数。
当构造函数返回时,要求所有非静态的值类型字段都已经初始化。
构造函数野兽可见性级别的控制,使用方式与其他方法一样。
结构的相关例子
{
public int Price;
public Artical( int price) // 构造函数1
{
this .Price = price;
}
public Artical( double price) // 构造函数2
{
this .Price = price;
}
}
class Program
{
static void Main( string [] args)
{
Artical a; // 调用结构默认构造函数
Artical b = new Artical( 6 ); // 调用构造函数1
Artical c = new Artical( 6.4 ); // 调用构造函数2
}
}
类的相关例子
{
public int Price;
public Artical( int price) // 构造函数1
{
this .Price = price;
}
public Artical( double price) // 构造函数2
{
this .Price = price;
}
public Artical() // 构造函数3
{
this .Price = price;
}
}
class Program
{
static void Main( string [] args)
{
Artical a = new Artical(); // 调用构造函数3
Artical b = new Artical( 6 ); // 调用构造函数1
Artical c = new Artical( 6.4 ); // 调用构造函数2
}
}
创建引用类型时必须使用new操作符。创建值类型时,如果想调用构造函数,也必须使用new操作符,如果不使用,实例能够创建,但却可能没有调用任何构造函数。