C# 深入理解类(实例构造函数)
|
admin
2025年5月19日 17:27
本文热度 44
|
实例构造函数
实例构造函数是一个特殊的方法,它在创建类的每个新实例时执行。
- 如果希望能从类的外部创建类的实例,需要将构造函数声明为public。 图7-2阐述了构造函数的语法。除了下面这几点,构造函数看起来很像类声明中的其他方法。
例如,下面的类使用构造函数初始化其字段。本例中,它有一个名为TimeOfInstantiation 的字段被初始化为当前的日期和时间。
class MyClass
{
DateTime TimeOfInstantiation; //字段
...
pubic MyClass() //构造函数
{
TimeOfInstantiation =DateTime.Now; //初始化字段
}
...
}
说明 在学完静态属性那一节后,我们可以仔细看看初始化TimeOfInstantiation那一行。 DateTime类(实际上它是一个结构,但由于还没介绍结构,你可以把它先当成类)是从 BCL中引入的,Now是类DateTime的静态属性。Now属性创建了一个新的DateTime类的 实例,将其初始化为系统时钟中的当前日期和时间,并返回新DateTime实例的引用。
带参数的构造函数
构造函数在下列方面和其他方法相似。
- 构造函数可以带参数。参数的语法和其他方法完全相同。
- 构造函数可以被重载。 在使用创建对象表达式创建类的新实例时,要使用new运算符,后面跟着类的某个构造函数。 new运算符使用该构造函数创建类的实例。 例如,在下面的代码中,Class1有3个构造函数:一个不带参数,一个带int参数,一个带 string参数。Main使用各个构造函数分别创建实例。
class Class1
{
int Id;
string Name;
public Class1(){Id=28;Name="Nemo";} //构造函数0
public Class1() {ID=val;nameof="Nemo";} //构造函数1
public Class1(String name){Name=name;} //构造函数2
public void SoundOff()
{
Console.WriteLine($"Name{Name},Id{Id}");
}
}
class Program
{
static void Main()
{
Class1 a=new Class1(); //调用构造函数0
b=new Class1(7); //调用构造函数1
c=new Class1("Bill"); //调用构造函数2
a.SoundOff();
b.SoundOff();
c.SoundOff();
}
}
默认构造函数
如果在类的声明中没有显式地提供实例构造函数,那么编译器会提供一个隐式的默认构造函 数,它有以下特征。
如果你为类声明了任何构造函数,那么编译器将不会为该类定义默认构造函数。 例如,下面代码中的Class2声明了两个构造函数。
- 因为已经至少有一个显式定义的构造函数,所以编译器不会创建额外的构造函数。
- 在Main中,试图使用不带参数的构造函数创建新的实例。因为没有无参数的构造函数, 所以编译器会产生一条错误消息。
class Class2
{
publicClass2(int Value) {...} //构造函数0
publicClass2(String Value){...} //构造函数1
}
class Program
{
static void Main()
{
Class2 a=new Class2(); //错误!没有无参数的构造函数
...
}
}
说明 可以像对其他成员那样,对实例构造函数设置访问修饰符。可以将构造函数声明为public, 这样在类的外部也能创建类的实例。也可以创建private构造函数,这样在类外部就不 能调用该构造函数,但在类内部可以。
该文章在 2025/5/21 9:28:24 编辑过