建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间

在我们身边的世界中,对象是什么?对象就是事物,俗称“东西”。那么,什么东西算得上是一个对象呢?对象有属性、有行为。以动物为例,比如猫(Cat)。Cat可以有Name,这就是属性;Cat有一个恶习ScratchSofa(挠沙发),这就是行为。我们把这些属性和行为结合起来,就称为一个类型:

    class Cat
{
public string Name { get; set; } public void ScratchSofa()
{
Console.WriteLine("{0}在挠沙发",Name);
}
}

当然,类型只是规范了某类对象,它提炼出了接口、规范了协议,而真正的对象是要生产出来的。比如Tom猫,必须生产(即new)出来,才会在现实世界(可以理解为CLR运行时)中真正存在(即分配内存)。代码如下:

Cat tom =new Cat();
tom.Name = "Tom";
tom.ScratchSofa();

软件中的任何“东西”都可以用这个思路去理解。

当我们编码时,将CLR当成一个现实世界,并时刻考虑将某些具有共同属性和行为的对象抽象成一个个类型,这时我们就迈出了面向对象的第一步。

现实生活中的对象可以归类,这往往是一种树形结构。我们将生物归纳为动物和植物。

CLR中的对象也是与之相同的道理,以WinForm中的窗体为例,我们将系统中的窗体分为后台管理窗体和报表前台窗体。

在编码过程中,我们将类型用包(文件夹)管理起来,就有了“命名空间”的概念。命名空间中的每一个节点,如“后台管理窗体”,就代表一个分类。在该节点下,是属性和行为比较近的一组类型。如果不将类型分组分类,混乱马上就会出现。当然,在敏捷开发中不要求一开始就将所有的类型或命名空间都定义出来,随着每一次迭代的进行,可以通过重构将类型的组织结构整合得更加合理。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

最新文章

  1. LPC2478调试___ads常见错误分析
  2. 【poj3615】 Cow Hurdles
  3. Android 5.x特性概览四
  4. .NET 可选择的转型路径(转)
  5. 程序开发心理学阅读笔记——第I篇
  6. python - PipeMapRed.waitOutputThreads(): subprocess failed with code 1
  7. 关于网络连接方式的总结(HostOnly,NAT....)
  8. 咱也玩玩Wordpress
  9. Android 部分属性学习
  10. typedef和define的作用域
  11. win10 ie11 以管理员身份运行才正常
  12. AI 人工智能 探索 (九)
  13. Java设计模式之《外观模式》及应用场景
  14. cocos2d JS 源生js实现each方法
  15. JavaBean初识
  16. symfony框架
  17. 添加网络打印机的步骤(xp和win2008+win7)
  18. word文档内容如何防止被复制
  19. 潭州课堂25班:Ph201805201 第五课:格式化输出和深浅复制 (课堂笔记)
  20. 前端 HTML 常用标签 head标签相关内容 meta标签

热门文章

  1. oracle监听动态注册与静态注册
  2. .NET中使用unity实现aop
  3. pycharm多行代码缩进、左移
  4. java 红包规则
  5. keil5破解
  6. spring-boot-maven-plugin 插件的作用
  7. Spring与Redis的实现
  8. Spring3X升级到Spring4X时,出现的问题
  9. C# 发送和接受Get请求
  10. FreeSWITCH 使用SSL-WebSocket-WebRTC