可访问性
基类和派生类
省略基类的指定等同于从类型 object 派生。
用new生成对象,当不再使用对象时,该对象占用的内存将自动收回。在 C# 中,没有必要也不可能显式释放分配给对象的内存。
派生类能够在继承基类的基础上添加新的成员,但是它不能移除继承成员的定义。
类类型的变量可以引用该类的实例或任何派生类的实例。例如,Point 类型的变量既可以引用 Point 也可以引用 Point3D:
静态(static)和实例
1. 静态字段和实例字段
在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据。静态变量在类中类似全局变量,保存类的公共信息,所有该类的实例(对象)共享该值。
使用 static 修饰符声明的字段定义了一个静态字段 (static field)。一个静态字段只标识一个存储位置。对一个类无论创建了多少个实例,它的静态字段永远都只有一个副本。不使用 static 修饰符声明的字段定义了一个实例字段 (instance field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。
使用 readonly 修饰符声明只读字段 (read-only field)。给 readonly 字段的赋值只能作为字段声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现。
2. 静态方法和实例方法
静态方法不对特定实例进行操作,并且只能访问静态成员;实例方法对特定实例进行操作,并且能够访问静态成员和实例成员。
调用方法
函数参数
有四种类型的参数:值参数、引用参数、输出参数和参数数组。
- 对值参数的修改不影响为该形参传递的实参(新手注意)。
- 引用参数使用 ref 修饰符声明。为引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置。
- 输出参数是用 out 修饰符声明。使返回多个返回值成为可能。
- 参数数组 (parameter array) 允许向方法传递可变数量的实参。参数数组使用 params 修饰符声明。只有方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。
虚方法、重写方法和抽象方法
声明 | 定义或功能 | |
---|---|---|
虚方法 | virtual | 引入新方法,可以在派生类中重写 |
重写方法 | override | 重写所继承的具有相同签名的虚方法 |
抽象方法 | abstract | 没有实现的虚方法;只有在同样被声明为 abstract 的类中才允许出现;必须在每个非抽象派生类中重写。 |
下面的示例声明一个抽象类 Expression,它表示一个表达式树节点;它有三个派生类 Constant、VariableReference 和 Operation,它们分别实现了常量、变量引用和算术运算的表达式树节点。
下面的程序使用 Expression 类,对于不同的 x 和 y 值,计算表达式 x * (y + 2) 的值。
启发:
- 如何实现数值的带入,日后可用于计算复杂公式。
- 抽象类使用:在表达式中。既可使用数字也可以使用字符
其他函数成员
- 构造函数:和类名相同,用于初始化。
- 属性函数
- 索引器:该成员的名称是 this,后跟一个位于定界符 [ 和 ] 之间的参数列表。
- 事件:事件处理程序使用 += 运算符添加,使用 -= 运算符移除。下面的示例向 List 类的 Changed 事件添加一个事件处理程序。
- 运算符:定义了特定表达式运算符的含义
第一个 Console.WriteLine 输出 True,原因是两个列表包含的对象数目和值均相同。如果 List 未定义 operator ==,则第一个 Console.WriteLine 将输出 False,原因是 a 和 b 引用的是不同的 List 实例。
网友评论