定义成员
普通的修饰词我便不解释了 有 public private internal(接口是Interface) protected 其中private默认不写修饰词默认是这个其中接口除外 接口成员都是公共的 且不能有修饰符,其中有 protected internal 受保护的内部成员。也可以使用static静态修饰字段属性方法,含义就是将成员修饰为静态的,而并非对象实例的成员
定义字段
定义字段中的readonly 含义是修饰字段时是将当前的字段修饰为只读字段,只能在执行构造函数的过程或者声明的时候赋值。仅两种情况另外还有const关键字 来创建一个常量 。const成员也是静态的 所以不需要Static 修饰
定义方法
方法定义当中也可以使用下列关机键
关机字及用处 |
作用 |
Virtual 定义虚构函数 |
它能由子类重写 |
absstrct定义抽象函数 |
必须由非抽象的派生类重写(抽象成员只在抽象类当中) |
Override重写关机键 |
方法重写了一个基类方法必须使用该关键字 |
extern代表外部成员 |
方法定义在其他地方 |
小tips:
当重写了某个基类的方法不想再由子类能重写 可以使用sealed来指定派生类不能再重写该方法。
定义属性
属性当中由get set块 get是程序再读取当前属性的值时触发get块 get块必须由一个属性同类型的返回值简单的属性就是返回当前私有字段。Set块就是程序在对当前属性进行设置赋值的时候 触发set块 一般是将Value 赋值给字段 Value 就是代表用户提供的属性值。可以在属性设置时设置非空处理如下实例代码
- private int? myVar;//不理解 ? 和??后面章节笔记会提到
- public int? MyProperty
- {
- get { return myVar; }
- set { myVar = value ?? 0; }//set 块 我们提到它时程序赋值给属性值触发
- }
还可以在属性set中做很多值处理 如只需要5-10的数字 否则 附上默认值。或抛出异常
If(value>0){……}
示例判断不满足抛出异常
属性可以使用virtual、override、abstract例如
这样修饰后设置的值就将只能是派生类和当前类的代码才能访问。
C#6当中引入“基于表达式的属性“
元组析构 P163 ★*
附录:
重构成员
重构标识通过工具修改而不是手动修改如下图
自动属性
通过快速创建属性不写字段以及get 和set块 如下。我们没有提供字段以及代码块,编译器会自动添加字段,以及get 和set块代码(基础形式代码块 return ——字段 字段=Value)能节省空间但右不减需求。我们还可以在缩短为1行 如下10-2
- public string K
- {
- get;
- set;
- }
- public int K { get; set; }
10-2简写示例
隐藏基类方法
通常在下面的情况当中我们需要手动的标注为隐藏父类方法 如
修改前 修改后
调用重写或隐藏的基类方法
this 关键字与base一样也可以调用内部类成员,且this关键字还引用了当前对象实例。但不能直接this+.+静态成员 (原因:this是引用了当前对象实例)this使用场景 1:传递当前对象实例参数、2:限定为当前对象局部成员 (this.str str当前类中字段)
嵌套类型定义
主要用来定义对其包含类来说是私有的类,名称空间的其他代码不能访问,嵌套类可以访问包括类的私有 和保护成员。如下10-5示例 如果您将Student 移除那么将会报错,原因就是打破了嵌套类型定义2是受保护以及私有您访问不到。
10-5嵌套类型 示例
提示:
protected受保护的:可以在当前类的内部以及该类的子类中访问。(不能通过基类以及子类实例来访问)
private:私有的,只能在当前类的内部进行访问,出了这个类就访问不到了。