C#之类的理解

  不想按照传统教科书的方式去讲解类和对象涉及的一些概念(类与对象的关系,构造函数和析构函数,对象的声明和实例化,public,private,protected,类的继承,类的多态等等)。这些概念应该结合具体的实例去理解,才能更好的体会到这些东西存在的意义。

  这篇文章试图说明下类这个东西被发明出来的意义。在面向对象设计语言出现之前,也就是c语言的时代,主要的程序开发方法是面向过程的方式,采用功能分解,自顶向下,将复杂的处理层层分解的方式。类的出现其实是一种自然而然过程。

  初学面向对象的同学不要被类及其相关的一些概念所吓倒,我们可以将类理解为类型。微软的.NET框架(其他的平台语言也是,例如java)提供的一些最基础,最常用的类型(int,string,datetime等)。这些都是类。而我们在软件开发的过程中,在解决现实问题的过程中,会遇到各种不同的需求和场景。这时就需要我们对基础类型进行组合,抽象出真实世界的类型。我们可以看一下微软为我们设计的日期DateTime类型。以下是它的一些属性(部分):

public DateTime Date { get; }

public int Day { get; }

public DayOfWeek DayOfWeek { get; }

public int DayOfYear { get; }

public int Hour { get; }

public int Minute { get; }

public int Month { get; }

public static DateTime Now { get; }

public int Second { get; }

public int Year { get; }

它有以下一些方法(部分)

public DateTime AddDays(double value);

public DateTime AddHours(double value);

public DateTime AddMinutes(double value);

public DateTime AddMonths(int months);

public DateTime AddSeconds(double value);

public string ToLongDateString();

public string ToShortTimeString();

稍微分析一下这些属性和方法的确是日期这样的一个类型所必需的。

举个例子,假设我们开发一个学校管理系统,我们可能需要有学生对象

class Student

{

  string strName;//姓名

  int nAge;//年龄

  decimal dIntelligenceFactor; //智商

  decimal dHardworkingDegree; //勤奋程度

  ...

}

可能这样设计教室对象

class ClassRoom

{

  int nBuildingNo; //楼号  

  int nFloor;//楼层

  decimal dArea;//面积

}

如果我们了解了List<T>这样的泛型集合类之后,我们会很自然的设计出合理的班级类型

class Class

{

  string strClassName;//班级名称

  ClassRoom classRoom; //所在教室

  List<Student> lstStudents; //班级学生

}

由上面可见,所有的客观世界中的需求,都可以抽象成基本类型的组合再组合。一般我们开发某个系统的时候,先要抽象(设计)出该系统中的一个个领域对象,这些领域对象可能是简单的基本类型的组合,也可能是一些抽象出来的领域对象的再组合。