C# 构造函数

2021-06-28 13:06

阅读:441

标签:this   用法   out   修饰符   属性   第2版   情况下   output   指令   

构造函数

构造函数分为:实例构造函数,静态构造函数,私有构造函数。

实例构造函数

1、构造函数的名字与类名相同。

2、使用 new 表达式创建类的对象或者结构(例如int)时,会调用其构造函数。并且通常初始化新对象的数据成员。

3、除非类是静态的,否则会为没有构造函数的类,自动生成一个默认构造函数,并使用默认值来初始化对象字段。

4、构造函数可以有参数,可以以多态的形式存在多个构造函数。

例:

class CoOrds
{
    public int x, y;
    // 实例构造函数(默认构造函数)
    public CoOrds()
    {
        x = 0;
        y = 0;
    }

    // 具有两个参数的构造函数
    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    // 重写toString方法
    public override string ToString()
    {
        return (String.Format("({0},{1})", x, y));
    }

    static void Main(string[] args)    

{        

CoOrds p1 = new CoOrds();        

CoOrds p2 = new CoOrds(5, 3);

 

  // 使用重写ToString方法显示结果        

Console.WriteLine("CoOrds #1 at {0}", p1);        

Console.WriteLine("CoOrds #2 at {0}", p2);       

Console.ReadKey();  

  }

}

/* Output:

 CoOrds #1 at (0,0)

 CoOrds #2 at (5,3)       

*/

其中CoOrds()是构造函数,诸如此类不带参数的构造函数称为“默认构造函数”。

CoOrds(int x, int y)同样也是构造函数,构造函数可以有参数,允许多态。

静态构造函数

静态构造函数具有以下属性:

  • 静态构造函数不使用访问修饰符或不具有参数。

  • 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数以初始化类。

  • 不能直接调用静态构造函数。

  • 用户无法控制在程序中执行静态构造函数的时间。

  • 静态构造函数的一种典型用法是在类使用日志文件且将构造函数用于将条目写入到此文件中时使用。

  • 静态构造函数对于创建非托管代码的包装类也非常有用,这种情况下构造函数可调用 LoadLibrary 方法。

  • 如果静态构造函数引发异常,运行时将不会再次调用该函数,并且类型在程序运行所在的应用程序域的生存期内将保持未初始化。

构造函数与静态构造函数:

class TestClass
{
    public static int x = 0;
    //构造函数
    TestClass()
    {
        x = 1;
    }
//静态构造函数
    static TestClass()
    {
        //第二步,执行x = 2
        x = 2;
    }

//第一步,程序入口Main最先执行。然后执行public static int x = 0 接着执行静态构造函数。
    public static void Main(string[] args)
    {
        Console.WriteLine("x:{0}", x); //打印,x = 2
        TestClass Test = new TestClass();//第三步执行构造函数,此时x = 1
        Console.WriteLine("x:{0}", x); //打印 x = 1
        Console.Read();
    }
}

 

Main是程序入口,当执行Main的时候,最先执行public static int x = 0

 

接着执行静态构造函数,此时 x = 2 

 

然后执行Main函数里面的内容,打印 x,此时 x = 2

 

初始化TestClass,然后会执行构造函数,此时 x = 1

 

打印 x = 1 

 

同样类型的第二个以及以后的实例将从第5步开始执行,因为类的构造器仅会执行一次。此外,第6步和第7步将被优化,以便构造函数初始化器使编译器移除重复的指令。

 

 

那么,在调用某类的静态函数时真正的执行顺序:

 

1、静态变量 > 静态构造函数 > 静态函数

 

2、静态变量 > 静态构造函数 > 构造函数

 

C#高效编程改进C#代码的50个行之有效的办法(第2版)里说到这样一段话:
类型实例的完整过程。你需要理解这些操作的顺序,以及对象的默认初始化操作。你要保证在构造的过程中对每个成员变量仅初始化一次。实现这一点最好的方法就是,尽可能的早地进行初始化。 下面就是创建某个类型的第一个实例时,所进行的操作顺序为:
(1)静态变量设置为0
(2)执行静态变量初始化器
(3)执行基类的静态构造函数
(4)执行静态构造函数
(5)实例变量设置为0
(6)执行衯变量初始化器
(7)执行基类中合适的实例构造函数
(8)执行实例构造函数 
 

C# 构造函数

标签:this   用法   out   修饰符   属性   第2版   情况下   output   指令   

原文地址:https://www.cnblogs.com/laomaoxiapu/p/10042272.html


评论


亲,登录后才可以留言!