构造器(一种特殊的方法)

  • 构造器(constructor)是类型的成员之一
  • 狭义的构造器指的是“实例构造器”(instance constructor)
  • 如何调用构造器
  • 声明构造器
  • 构造器的内存原理

构造函数译为构造器,成员函数译为方法,它们本质都还是函数。

默认构造器

  1. namespace ConstructorExample
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Student stu = new Student();
  8. Console.WriteLine(stu.ID);
  9. }
  10. }
  11. class Student
  12. {
  13. public int ID;
  14. public string Name;
  15. }
  16. }

默认构造器将int型的 ID 初始化为 0:

  1. 0
  2. 请按任意键继续. . .

无参数默认构造器

  1. namespace ConstructorExample
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Student stu = new Student();
  8. Console.WriteLine(stu.ID);
  9. Console.WriteLine(stu.Name);
  10. }
  11. }
  12. class Student
  13. {
  14. public Student()
  15. {
  16. ID = 1;
  17. Name = "No name";
  18. }
  19. public int ID;
  20. public string Name;
  21. }
  22. }

输出:

  1. 1
  2. No name
  3. 请按任意键继续. . .

带参数构造器

一旦有了带参数的构造器,默认构造器就不存在了。若还想调用无参数构造器,必需自己写。

  1. namespace ConstructorExample
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Student stu = new Student(2, "Mr.Okay");
  8. Console.WriteLine(stu.ID);
  9. Console.WriteLine(stu.Name);
  10. }
  11. }
  12. class Student
  13. {
  14. public Student(int initId,string initName)
  15. {
  16. ID = init Id;
  17. Name = initName;
  18. }
  19. public int ID;
  20. public string Name;
  21. }
  22. }

输出:

  1. 2
  2. Mr.Okay
  3. 请按任意键继续. . .

Code Snippet
ctor + TAB * 2:快速生成构造器代码片段 6.2 构造器 - 图2

构造器内存原理

默认构造器图示

图中左侧代指栈内存,右侧代指堆内存。
注意栈内存分配是从高地址往低地址分配,直到分配到栈顶。

  1. public int ID;// int 结构体 占4个字节
  2. public string Name;// string 引用类型 占4个字节 存储的是实例的地址

6.2 构造器 - 图3

带参数构造器图示

  1. Student stu = new Student(1, "Mr.Okay");

6.2 构造器 - 图4