C#构造函数是一种特殊的方法,它在创建对象时被调用。它的主要作用是初始化对象,即为对象的字段赋值。构造函数可以有参数,也可以没有参数。如果一个类中不存在任何构造函数,那么系统会自动生成一个无参的默认构造函数。
C#中的构造函数有多种形式,其中包括无参、带参、静态、多重、隐式和显式等。无参构造函数是最常用的一种形式,它不带任何参数,并且在创建对象时会自动执行。带参构造函数是一种特殊的方法,它允许在创建对象时传入一些必要的信息,这些信息将用于初始化该对象。
静态构造函数是一种特殊的方法,它不能使用new关键字来创建对象,而是在使用该类之前就会执行。多重构造函数是一种特性,它允许向同一个类中定义多个不同形式的重载版本的方法来初始化该对象。隐式和显式都是C#中特有的形式,隐式表明不使用new关键字来创建对象而显式表明使用new关键字来创建对象。
public class Student { public string Name; // 无参数的构造函数 public Student() { Name = "N/A"; } // 带1个string参数的构造函数 public Student(string name) { Name = name; } // 静态方法 static Student() { Console.WriteLine("Static Constructor Called"); } // 多重重写 public Student(int id, string name) : this(name) { Console.WriteLine("Multi-parameter Constructor Called"); } // 隐式重写 public Student(int id) : this() { Console.WriteLine("Implicit Constructor Called"); } }
构造函数在类或结构体上运行初始化代码。
构造函数被定义为一个方法。
构造函数具有与类型相同的名称,并且没有返回类型:
public class Person {
string name; // Define field
public Person (string n){ // Define constructor
name = n; // Initialization code
}
}
...
Person p = new Person ("CSS"); // Call constructor
实例构造函数允许以下修饰符:
项目 | 修饰符 |
---|---|
访问修饰符 | public internal private protected |
非托管代码修饰符 | unsafe extern |
类或结构可能重载构造函数。
为了避免代码重复,一个构造函数可以使用this关键字调用另一个构造函数:
using System;
public class Product {
public decimal Price;
public int Year;
public Product (decimal price) {
Price = price;
}
public Product (decimal price, int year) : this (price) {
Year = year;
}
}
当一个构造函数调用另一个时,被调用的构造函数首先执行。
我们可以将表达式传递给另一个构造函数,如下所示:
public Product (decimal price, DateTime year) : this (price, year.Year) {
}
表达式本身不能使用这个引用。
对于类,当且仅当我们没有定义任何构造函数时,C#编译器自动生成一个无参数的公共构造函数。
对于结构体,无参数构造函数是struct的固有的;因此,我们不能定义我们自己的无参数构造函数。
我们之前看到字段可以在它们的声明中用默认值初始化:
class Sprite {
int shields = 50; // Initialized first
int health = 100; // Initialized second
}
字段初始化发生在执行构造函数之前,并且在字段的声明顺序中。
构造函数不需要公开。
有一个非公共构造函数的常见原因是通过静态方法调用来控制实例创建。
public class Class1 {
Class1() {} // Private constructor
public static Class1 Create (...) {
// call Class1 constructor here
}
}
静态构造函数对每个类型执行一次,而不是每个实例执行一次。
类型只能定义一个静态构造函数,它必须是无参数的,并且具有与类型相同的名称:
class Main {
static Main () {
Console.WriteLine ("Type Initialized");
}
}
运行时在所使用的类型之前自动调用静态构造函数。
有两件事情触发了:
静态构造函数允许的唯一修饰符是unsafe和extern。
静态字段初始化器在调用静态构造函数之前运行。
C#语法C#语法的灵感来自C和C ++语法。它与Java也有类似的语法。在本节中,我们将使用以下程序来描述C#的语法元素:using Syste...
C# 文件的输入与输出一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。 ...
C# 特性(Attribute)特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声...
在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨...