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; //班级学生
}
由上面可见,所有的客观世界中的需求,都可以抽象成基本类型的组合再组合。一般我们开发某个系统的时候,先要抽象(设计)出该系统中的一个个领域对象,这些领域对象可能是简单的基本类型的组合,也可能是一些抽象出来的领域对象的再组合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?