类 和 结构 都是创建对象的模板, 都可以用 new 类实例化
结构是值类型,存储在栈上, 类是引用类型 存储在堆上
类可以包含数据成员,函数成员 和 类成员
数据成员: 字段,常量 和 事件 (在发生某些行为时,事件可以让对象通知调用方,客户可以包含事件处理程序来响应事件)
函数成员 提供了 操作类中数据的某些功能 包括方法,属性,构造函数 和 终结器 (finalize)运算符 以及 索引器
ref 迫使 值 以引用方式传递
使用ref修饰的引用类型参数 , 可以在方法内部 修改 引用类型参数指向的地址。否则不能修改。
这块使用ref 会直接操作 参数指向的地址
如果没有ref 就会将地址拷贝一份,在拷贝的地址上进行操作,指向的新的地址只会保存在 拷贝的引用上,因此退出方法时 并不会保存修改!
传递给方法的参数必须初始化
在方法参数 前面加上 out 前缀 就可以不初始化
在调用方法时 也必须加上 ref 或者 out
可选参数, 必须为参数 定义 默认值 并且 必须放在最后
方法重载 : 只需省声明 同名 但 参数个数或类型不同 的方法
两个方法不能仅在 返回类型上有区别
两个方法不能仅根据 参数 声明为 ref 或者 out 来区别
包含 get 和 set 访问器的 字段 就是属性
在get 和 set 访问器 中,至少有一个要有访问级别 。 即 不添加 private和 protect
自动实现属性 , 不能在属性的验证中,验证属性的有效性
public int Age{ get; set; }
通过属性 访问字段,而不是 直接访问字段
如果实现某个方法或 属性 仅是调用另一个方法,或返回一个字段 , 则该方法或属性 肯定是内联的
构造函数:
如果提供了 带参数的构造函数 ,编译器 就不会提供默认构造函数
只有在没有提供任何构造函数 , 编译器才会提供默认构造函数
C# 中 可以认为 finalize 就是 析构函数
在类中,析构函数和 C++ 一样 调用 ~ClassName(){}
但是 在析构函数中 还是 会调用 基类(object) 中 的 finalize 函数
到 page 77 构造函数