类、对象和类成员
1.类与对象的关系
对象也叫实例,是类经过”实例化“后得到的内存中的实体。
Formally "instance" is synonymous with "object" ---- 对象和实例是一回事
"飞机"与"一架飞机"有何区别?天上有(一架)飞机 ---- 必须是实例飞,概念不能飞
有些类是不能实例化的,比如"数学"(Math class),我们不能说"一个数学"
依照类,我们可以创建对象,这就是"实例化"
现实世界中常称"对象",程序世界中常称"实例"
二者并无太大区别,常常混用
使用new操作符创建类的实例
引用变量与实例的关系
孩子与气球
气球不一定有孩子牵着,孩子也不一定牵着气球
多个孩子可以使用各自的绳子牵着同一个气球,也可以通过同一根绳子(ref)牵着同一个气球
Balloon child1; // 声明了一个引用变量,但未指向任何对象(孩子手里没气球) //此时 child1 是 null,因为它还没有指向任何 Balloon 对象。 //如果尝试访问 child1 的成员(如 child1.Color),会抛出 NullReferenceException。 ================================================= new Balloon(); // 创建了一个 Balloon 对象,但没有变量引用它 //这个 Balloon 对象在堆上分配了内存,但没有引用变量指向它。 //它会被 垃圾回收器(GC) 回收,因为没有引用可以访问它。 ================================================= Balloon balloon = new Balloon(); // 创建了一个气球 Balloon child1 = balloon; // 第一个孩子牵着这个气球 Balloon child2 = balloon; // 第二个孩子也牵着同一个气球 //child1 和 child2 都指向 同一个 Balloon 对象。 //如果通过 child1 修改气球属性(如 child1.Color = "Red"),child2 也会看到变化。 ================================================= //一个孩子通过多根绳子指向同一个气球 int x = 5, y = 10; Swap(ref x, ref y); // 交换后 x=10, y=5 private void Swap(ref int a, ref int b) { int temp = a; a = b; b = temp; }
2.类的三大成员:属性、方法、事件
属性 Property
存储数据,组合起来表示类或对象当前的状态。
方法 Method
由C语言中的函数(function)进化而来,表示类或对象"能做什么"
工作中90%的时间是与方法打交道,因为它是"真正做事"、"构成逻辑"的成员
时间 Event
类或对象通知其它类或对象的机制,为C#所特有(Java通过其它办法实现这个机制)
善用事件机制非常重要(切勿滥用)
3.某些特殊类或对象在成员方面侧重点不同
模型类或对象重在属性,如 Entity Framework
工具类或对象重在方法,如 Math,Console
通知类或对象重在事件,如各种 Timer
浙公网安备 33010602011771号