当前位置:   article > 正文

P24 什么是类_类是数据结构吗

类是数据结构吗

从本节开始深入学习面向对象编程。

当前的视频教程是 1.0 版本,针对的是 C# 5.0。

1 前 22 讲的简要总结

  1. 讲解了 C# 基本元素、基本语法
  2. 把类的成员过了一遍:字段、属性、方法、事件
  3. 在前面其实已经讲过了封装、后面讲继承和多态

2 什么是“类”

类是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、实例构造函数、静态构造函数和析构函数)以及嵌套类型。类类型支持继承,继承是一种机制,它使派生类可以对基类进行扩展和专用化。 —— 《C# 语言规范》

注:这是在描述类是什么,讲的是类的外延而不是类的内涵。

计算机领域的类有下面三个方面

  • 是一种数据结构(data structure)
  • 是一种数据类型
  • 代表现实世界中的"种类"

2.1 类是一种数据结构(Data Structure)

类是一种“抽象”的数据结构。

  • 类本身就是“抽象”的结果,例如把学生抽象为 Student 类;

  • 类也是“抽象”结果的载体。Student 类承载着学生的抽象(学生的 ID,学生的行为等)

这里提到的 data structure 和算法里面的 data structure 略有不同。算法里面的数据结构更多是指集合(List、Dictionary 等)数据类型。

  1. namespace HelloClass
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //Student stu = new Student();使用默认构造器
  8. Student stu = new Student(1,"Timonty") ;//自定义构造器,一旦使用自定义构造器,则默认构造器无效
  9. //类是实例的模板
  10. Console.WriteLine(stu.ID);
  11. Console.WriteLine(stu.Name);
  12. stu.Report();
  13. }
  14. }
  15. //1、类是一种数据结构
  16. //2、类是一种自定义的引用类型
  17. class Student
  18. {
  19. //自定义构造器
  20. public Student(int id,string name)
  21. {
  22. ID = id;
  23. Name = name;
  24. }
  25. //从现实世界学生抽象出来的属性
  26. public int ID { get; set; }
  27. public string Name { get; set; }
  28. //从现实世界学生抽象出来的行为
  29. public void Report()
  30. {
  31. Console.WriteLine($"I'm #{ID} student,my name is {Name}.");
  32. }
  33. }
  34. }

2.2 类是一种数据类型

类是一种引用类型,具体到每一个类都是一个自定义的类型:

  1. 可以用类去声明变量
  2. 可以用类去创建实例(把类作为实例的模板)

反射与 dynamic 示例

这两个示例也展现了类作为“数据类型”的一面。

反射的基础:

  1. Type t = typeof(Student);
  2. object o = Activator.CreateInstance(t, 1, "Timothy");
  3. Student stu = o as Student;
  4. Console.WriteLine(stu.Name);

dynamic 编程:

  1. Type t = typeof(Student);
  2. dynamic stu = Activator.CreateInstance(t, 1, "Timothy");
  3. Console.WriteLine(stu.Name);

 

2.3 代表现实世界中的“种类”

程序中的类与哲学、数学中的类有相通的地方。

  1. namespace HelloClass
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Student s1 = new Student(1, "Timothy");
  8. Student s2 = new Student(2, "Jacky");
  9. Console.WriteLine(Student.Amount);
  10. }
  11. }
  12. //1、类是一种数据结构
  13. //2、类是一种自定义的引用类型
  14. class Student
  15. {
  16. public static int Amount { get; set; }
  17. static Student()//静态构造器
  18. {
  19. Amount = 100;
  20. }
  21. //自定义构造器
  22. public Student(int id,string name)
  23. {
  24. ID = id;
  25. Name = name;
  26. Amount++;
  27. }
  28. //自定义析构器
  29. ~ Student()
  30. {
  31. Console.WriteLine("Bye bye! Release the system resources..");
  32. }
  33. //从现实世界学生抽象出来的属性
  34. public int ID { get; set; }
  35. public string Name { get; set; }
  36. //从现实世界学生抽象出来的行为
  37. public void Report()
  38. {
  39. Console.WriteLine($"I'm #{ID} student,my name is {Name}.");
  40. }
  41. }
  42. }

3 构造器与析构器

  1. namespace HelloClass
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //Student stu = new Student();使用默认构造器
  8. Student stu = new Student(1,"Timonty") ;//自定义构造器,一旦使用自定义构造器,则默认构造器无效
  9. //类是实例的模板
  10. Console.WriteLine(stu.ID);
  11. Console.WriteLine(stu.Name);
  12. stu.Report();
  13. }
  14. }
  15. //1、类是一种数据结构
  16. //2、类是一种自定义的引用类型
  17. class Student
  18. {
  19. //自定义构造器
  20. public Student(int id,string name)
  21. {
  22. ID = id;
  23. Name = name;
  24. }
  25. //自定义析构器
  26. ~ Student()
  27. {
  28. Console.WriteLine("Bye bye! Release the system resources..");
  29. }
  30. //从现实世界学生抽象出来的属性
  31. public int ID { get; set; }
  32. public string Name { get; set; }
  33. //从现实世界学生抽象出来的行为
  34. public void Report()
  35. {
  36. Console.WriteLine($"I'm #{ID} student,my name is {Name}.");
  37. }
  38. }
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/411445
推荐阅读
相关标签
  

闽ICP备14008679号