类是现实世界事物的模型
类是现实世界事物的模型
- 类是对现实世界事物进行抽象所得到的结果
- 事物包括“物质”(实体)与“运动”(逻辑)
- 建模是一个去伪存真、由表及里的过程
- 类是对现实世界事物进行抽象所得到的结果
- 事物包括“物质”(实体)与“运动”(逻辑)
- 建模是一个去伪存真、由表及里的过程
- 事物包括“物质”(实体)与“运动”(逻辑)
唯物主义辩证法对学习面向对象编程很有好处。
类与对象的关系
- 对象也叫实例,是类经过“实例化”后得到的内存中的实体
- Formally “instance” is synonymous with “object” —— 对象和实例是一回事
- “飞机”与“一架飞机”有何区别? 天上有(一架)飞机 —— 必需是实例飞,概念不能飞
- 有些类是不能实例化的,比如“数学”(Math class),我们不能说“一个数学”
- Formally “instance” is synonymous with “object” —— 对象和实例是一回事
- 依照类,我们可以创建对象,这就是“实例化”
- 现实世界中常称“对象”,程序世界中常称“实例”
- 二者并无太大区别,常常混用,初学者不必迷惑
- 现实世界中常称“对象”,程序世界中常称“实例”
- 使用 new 操作符创建类的实例
- 引用变量与实例的关系
- 孩子与气球
- 气球不一定有孩子牵着
- 多个孩子可以使用各自的绳子牵着同一个气球,也可以都通过一根绳子(ref)牵着各自的气球
- 孩子与气球
类的三大成员 属性、方法、事件
- 属性 Property
- 存储数据,组合起来表示类或对象当前的状态
- 存储数据,组合起来表示类或对象当前的状态
- 方法 Method
- 由 C 语言中的函数(function)进化而来,表示类或对象“能做什么”
- 工作中 90% 的时间是与方法打交道,因为它是“真正做事”、“构成逻辑”的成员
- 由 C 语言中的函数(function)进化而来,表示类或对象“能做什么”
事件 Event
- 类或对象通知其它类或对象的机制,为 C# 所特有(Java 通过其它办法实现这个机制)
- 善用事件机制非常重要(切勿滥用)
- 类或对象通知其它类或对象的机制,为 C# 所特有(Java 通过其它办法实现这个机制)
善用 MSDN 文档
- 某些特殊类或对象在成员方面侧重点不同
- 模型类或对象重在属性,如 Entity Framework
- 工具类或对象重在方法,如 Math,Console
- 通知类或对象重在事件,如各种 Timer
- 模型类或对象重在属性,如 Entity Framework
MSDN 文档阅读技巧



当微软示例的 Examples 看不明白时,就以 类名 + Examples 为关键字在网上搜索示例即可。
Entity Framework
PropertySample
- 用 NuGet 给项目添加 Entity Framework 引用
- 项目添加 ADO.NET Entity Data Model

- 设置 Data Model
- Generate from database
- Add new connection, selsect Microsoft SQL Server
- Fill in server name, local
- Select Adventure Works database
- Select table

- Generate from database
- 成功后的效果

- 代码
namespace PropertySample{class Program{static void Main(string[] args){AdventureWorks2014Entities proxy = new AdventureWorks2014Entities();foreach (Product p in proxy.Products){Console.WriteLine(p.Name);}Console.WriteLine("===============");Console.WriteLine(proxy.Products.Count());}}}
Code Snippet
- foreach + Tab * 2
- cw + Tab * 2 == Cosole.WriteLine();
Event
Event 示例。用 DispatcherTimer 写了个时钟。
using System.Windows.Threading;namespace EventSample{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DispatcherTimer timer = new DispatcherTimer();timer.Interval = TimeSpan.FromSeconds(1);timer.Tick += Timer_Tick;timer.Start();}private void Timer_Tick(object sender, EventArgs e){this.timeTextBox.Text = DateTime.Now.ToString();}}}
效果:
静态成员与实例成员
- 静态(Static)成员在语义上表示它是“类的成员”
- 物体固有的性质,隶属于某个类
- 物体固有的性质,隶属于某个类
- 实例(非静态)成员在语义表示它是“对象的成员”
- 实例成员是属于对象的,而非类
- 实例成员是属于对象的,而非类
- 绑定(Binding)指的是编译器如何把一个成员与类或对象关联起来
- 不可小觑的
.操作符 —— 成员访问操作符
- 不可小觑的


绑定分为“早绑定”和“晚绑定”
- 早绑定 编译器在编译时就知道成员是隶属于类还是隶属于类的对象
- 晚绑定 编译器不管,由程序员决定程序运行起来后一个成员(方法或属性)是隶属于类还是某个对象
- 有晚绑定的语言一般叫做动态语言,例如 JavaScript
- 有晚绑定的语言一般叫做动态语言,例如 JavaScript

