C# 深入理解类(实例构造函数)
				
									
					
					
						 | 
						
							
							admin 
							
							
								2025年5月19日 17:27
								本文热度 1630
							
							 
						 | 
					
					
				 
				实例构造函数
实例构造函数是一个特殊的方法,它在创建类的每个新实例时执行。
- 如果希望能从类的外部创建类的实例,需要将构造函数声明为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 编辑过