zhcn 编程语言 Golang Go 文件处理 非公開: C# 构造函数

C# 构造函数

在 C# 中,构造函数是与类(或结构)同名的成员函数。构造函数在类中具有特殊地位,不需要主动调用。当类的对象被创建时,它会自动调用class.function中的构造函数。在程序开发过程中,通常会使用类中的构造函数来初始化类中成员的属性。

C# 具有三种类型的构造函数。

  • 实例构造函数。
  • 静态构造函数。
  • 私有构造函数。

1.实例构造函数

构造函数是类中的特殊成员函数,与类同名并且没有返回值。当使用 new 关键字创建类的对象时,可以使用实例构造函数来创建和初始化类中的成员属性。以下示例显示了一个名为 Person 的类以及该类中的实例构造函数。

 public class Person{
    private string name;
    private int age;

    public Person(string n, int a)
    {
        name = n;
        age = a;
    }
    // このクラスの残りのメンバー
} 

当创建 Person 类的对象时,将调用该类中的实例构造函数。只需要在实例化对象时将某些值传递给类内部的构造函数即可,如下所示。

Person P = new Person(“Yamada”, 18);

如果没有为类显式创建构造函数,C# 会隐式地为该类创建一个无参数构造函数(parameterless constructor)。设置 C# 中成员属性的默认值(对于 C# 类型默认值,请参见下文)。 (到“数据类型”部分)。对于结构也是如此:如果没有为结构创建构造函数,C# 会隐式创建一个无参构造函数来将每个字段初始化为其默认值。

要初始化静态或非静态类的静态属性,必须使用下面描述的静态构造函数。

2.静态构造函数

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

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

  • 静态构造函数不使用访问修饰符或具有参数。
  • 一个类或结构只能有一个静态构造函数。
  • 静态构造函数不能被继承或重载。
  • 静态构造函数不能直接调用;它们只能由公共语言运行时 (CLR) 调用。
  • 用户无法控制程序中静态构造函数的执行时间。
  • 在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
  • 静态构造函数在实例构造函数之前执行。

[示例] 下面是一个显示实例构造函数和静态构造函数的示例。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        public static int num = 0;
        // コンストラクター
        Demo(){
            num = 1;
        }
        // 静的コンストラクター
        static Demo(){
            num = 2;
        }
        static void Main(string[] args) 
        {
            Console.WriteLine("num = {0}", num);
            Demo Obj = new Demo();
            Console.WriteLine("num = {0}", num);
            Console.Read();
        }
    }
} 

运行上面的程序时,首先执行public static int num = 0 ,然后执行类中的静态构造函数,此时num = 2,再执行Main函数的内容。然后将 num 的值打印为 2,初始化 Demo 类,执行类内的构造函数,并将 num 重新赋值为 1。上面的例子是:

num = 2
num = 1

3. 私有构造函数

私有构造函数是一种特殊类型的实例构造函数,通常用在仅包含静态成员的类中。如果一个类有一个或多个私有构造函数并且没有公共构造函数,则任何其他类(嵌套类除外)都不能创建该类的实例。例如:

 class NLog
{
    // プライベートコンストラクター
    private NLog() { }

    public static double e = Math.E;  //2.71828...
} 

在上面的例子中,定义了一个空的私有构造函数,但定义这个的好处是空构造函数可以防止自动生成无参数构造函数。请注意,如果构造函数中没有使用访问修饰符,则默认使用私有构造函数。

[示例] 下面的示例展示了如何使用私有构造函数。

 using System;

namespace it-kiso.com 
{ 
    class Demo 
    { 
        static void Main(string[] args) 
        { 
            // Student stu = new Student(); 
            Student.id = 101; 
            Student.name = "Yamada"; 
            Student.Display(); 
            Console.Read(); 
        } 
    } 
    public class Student 
    { 
        private Student() { } 
        public static int id; 
        public static string name; 
        public static void Display() 
        { 
            Console.WriteLine("姓名:"+name+" ID:"+id); 
        } 
    } 
} 

操作的结果将是:

姓名:Yamada ID:101

注意,在上面的代码中,如果取消 Main 函数Student stu = new Student();注释,程序会出现故障,因为 Student 类的构造函数是私有静态函数,无法访问,原因如下: 。其防护等级。

通俗易懂的《C#构造函数》讲解!您必须观看的最佳 2 个视频

C#プログラミング入門 2019 第12回 (3) コンストラクタ
https://www.youtube.com/watch?v=soYi8_jtrog&pp=ygUiIEMjIOOCs-ODs-OCueODiOODqeOCr-OCv-ODvCZobD1KQQ%3D%3D
オブジェクト指向のクラスのコンストラクタを超ざっくり解説!【何となく理解するIT】
https://www.youtube.com/watch?v=YZS_RAYYeXQ&pp=ygUiIEMjIOOCs-ODs-OCueODiOODqeOCr-OCv-ODvCZobD1KQQ%3D%3D
在 C# 中,构造函数是与类(或结构)同名的成员函数。构造函数在类中具有特殊地位,不需要主动调用。当类的对象被创建时,它会自动调用class.function中的构造函数。在程序开发过程中,通常会使用类中的构造函数来初始化类中成员的属性。

C# 具有三种类型的构造函数。

  • 实例构造函数。
  • 静态构造函数。
  • 私有构造函数。

1.实例构造函数

构造函数是类中的特殊成员函数,与类同名并且没有返回值。当使用 new 关键字创建类的对象时,可以使用实例构造函数来创建和初始化类中的成员属性。以下示例显示了一个名为 Person 的类以及该类中的实例构造函数。

 public class Person{
    private string name;
    private int age;

    public Person(string n, int a)
    {
        name = n;
        age = a;
    }
    // このクラスの残りのメンバー
} 

当创建 Person 类的对象时,将调用该类中的实例构造函数。只需要在实例化对象时将某些值传递给类内部的构造函数即可,如下所示。

Person P = new Person(“Yamada”, 18);

如果没有为类显式创建构造函数,C# 会隐式地为该类创建一个无参数构造函数(parameterless constructor)。设置 C# 中成员属性的默认值(对于 C# 类型默认值,请参见下文)。 (到“数据类型”部分)。对于结构也是如此:如果没有为结构创建构造函数,C# 会隐式创建一个无参构造函数来将每个字段初始化为其默认值。

要初始化静态或非静态类的静态属性,必须使用下面描述的静态构造函数。

2.静态构造函数

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

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

  • 静态构造函数不使用访问修饰符或具有参数。
  • 一个类或结构只能有一个静态构造函数。
  • 静态构造函数不能被继承或重载。
  • 静态构造函数不能直接调用;它们只能由公共语言运行时 (CLR) 调用。
  • 用户无法控制程序中静态构造函数的执行时间。
  • 在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
  • 静态构造函数在实例构造函数之前执行。

[示例] 下面是一个显示实例构造函数和静态构造函数的示例。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        public static int num = 0;
        // コンストラクター
        Demo(){
            num = 1;
        }
        // 静的コンストラクター
        static Demo(){
            num = 2;
        }
        static void Main(string[] args) 
        {
            Console.WriteLine("num = {0}", num);
            Demo Obj = new Demo();
            Console.WriteLine("num = {0}", num);
            Console.Read();
        }
    }
} 

运行上面的程序时,首先执行public static int num = 0 ,然后执行类中的静态构造函数,此时num = 2,再执行Main函数的内容。然后将 num 的值打印为 2,初始化 Demo 类,执行类内的构造函数,并将 num 重新赋值为 1。上面的例子是:

num = 2
num = 1

3. 私有构造函数

私有构造函数是一种特殊类型的实例构造函数,通常用在仅包含静态成员的类中。如果一个类有一个或多个私有构造函数并且没有公共构造函数,则任何其他类(嵌套类除外)都不能创建该类的实例。例如:

 class NLog
{
    // プライベートコンストラクター
    private NLog() { }

    public static double e = Math.E;  //2.71828...
} 

在上面的例子中,定义了一个空的私有构造函数,但定义这个的好处是空构造函数可以防止自动生成无参数构造函数。请注意,如果构造函数中没有使用访问修饰符,则默认使用私有构造函数。

[示例] 下面的示例展示了如何使用私有构造函数。

 using System;

namespace it-kiso.com 
{ 
    class Demo 
    { 
        static void Main(string[] args) 
        { 
            // Student stu = new Student(); 
            Student.id = 101; 
            Student.name = "Yamada"; 
            Student.Display(); 
            Console.Read(); 
        } 
    } 
    public class Student 
    { 
        private Student() { } 
        public static int id; 
        public static string name; 
        public static void Display() 
        { 
            Console.WriteLine("姓名:"+name+" ID:"+id); 
        } 
    } 
} 

操作的结果将是:

姓名:Yamada ID:101

注意,在上面的代码中,如果取消 Main 函数Student stu = new Student();注释,程序会出现故障,因为 Student 类的构造函数是私有静态函数,无法访问,原因如下: 。其防护等级。

通俗易懂的《C#构造函数》讲解!您必须观看的最佳 2 个视频

C#プログラミング入門 2019 第12回 (3) コンストラクタ
https://www.youtube.com/watch?v=soYi8_jtrog&pp=ygUiIEMjIOOCs-ODs-OCueODiOODqeOCr-OCv-ODvCZobD1KQQ%3D%3D
オブジェクト指向のクラスのコンストラクタを超ざっくり解説!【何となく理解するIT】
https://www.youtube.com/watch?v=YZS_RAYYeXQ&pp=ygUiIEMjIOOCs-ODs-OCueODiOODqeOCr-OCv-ODvCZobD1KQQ%3D%3D