9.1 字段 - 图2

  1. 字段历史悠久,C 语言就有了
  2. ID、Name 各占一块空间,这也是字段称为 field 的由来

    9.1 字段 - 图3什么是字段

    图片.png
    图片.png图片.png示例:实例字段与静态字段
    图片.png

    1. class Program
    2. {
    3. static void Main(string[] args)
    4. {
    5. List<Student> stuList = new List<Student>();
    6. for (int i = 0; i < 100; i++)
    7. {
    8. Student stu = new Student();
    9. stu.Age = 24;
    10. stu.Score = i;
    11. stuList.Add(stu);
    12. }
    13. int totalAge = 0;
    14. int totalScore = 0;
    15. foreach (var stu in stuList)
    16. {
    17. totalAge += stu.Age;
    18. totalScore += stu.Score;
    19. }
    20. Student.AverageAge = totalAge / Student.Amount;
    21. Student.AverageScore = totalScore / Student.Amount;
    22. Student.ReportAmount();
    23. Student.ReportAverageAge();
    24. Student.ReportAverageScore();
    25. }
    26. }
    27. class Student
    28. {
    29. public int Age;
    30. public int Score;
    31. public static int AverageAge;
    32. public static int AverageScore;
    33. public static int Amount;
    34. public Student()
    35. {
    36. Student.Amount++;
    37. }
    38. public static void ReportAmount()
    39. {
    40. Console.WriteLine(Student.Amount);
    41. }
    42. public static void ReportAverageAge()
    43. {
    44. Console.WriteLine(Student.AverageAge);
    45. }
    46. public static void ReportAverageScore()
    47. {
    48. Console.WriteLine(Student.AverageScore);
    49. }
    50. }

    字段的声明

    字段(field)是一种表示与对象或类关联的变量的成员。

  • 对于实例字段,它初始化的时机是在实例创建时
    • 声明实例字段时初始化值与在实例构造器里面初识化实例字段是一样的
  • 对于静态字段,它初始化的时机是在运行环境加载该数据类型时
    • 即静态构造器初始化时
    • 声明静态字段时设置初始化值与在静态构造器里面初始化静态字段其实是一样的

数据类型被运行环境加载时,它的静态构造器将会被调用,且只被调用一次。

静态构造器:
图片.png

只读字段

只读字段为实例或类型保存一旦初始化后就不希望再改变的值。

Code Shippet
ctor + 2 * TAB:插入构造函数代码片段。

只读实例字段

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

只读静态字段

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Console.WriteLine(Brush.DefaultColor.Red);
  6. Console.WriteLine(Brush.DefaultColor.Green);
  7. Console.WriteLine(Brush.DefaultColor.Blue);
  8. }
  9. }
  10. struct Color
  11. {
  12. public int Red;
  13. public int Green;
  14. public int Blue;
  15. }
  16. class Brush
  17. {
  18. public static readonly Color DefaultColor;
  19. static Brush()
  20. {
  21. Brush.DefaultColor = new Color() { Red = 0, Green = 0, Blue = 0 };
  22. }
  23. }