C#第九天

134 阅读4分钟

1.虚函数(重写父类中的方法)

image.png

2.抽象类

1.为什么要有抽象类

比如我们讲的怪物可能都有一技能的,也就是说都会有一个一技能攻击的方法,但是每个怪物的一技能都不一样,有时候在编写项目的时候可能忘记编写子类中一技能的方法,我们可以定义一个抽象父类,抽象类是一个不完整的模板,因为里面有抽象函数,抽象函数可以理解为一个没有函数体的函数,那么我们在使用继承的时候,会提示你编写攻击的函数,否则就会报错,这样可以更加规范我们代码的编写。

image.png 定义一个派生类继承抽象类中的方法,这时候会提示你要重写min方法 image.png 直接点击提示,实现抽象类 image.png

3.常见访问修饰符的了解

  • public 访问的最高权限,允许在同个项目或不同的项目中被访问
  • private 只允许在类或结构中被访问
  • internal 只允许在同个项目中被访问
  • protected 只允许在同一个类或结构或者此类的派生类中被访问

4.密封类

当我们创建的类不想被继承的时候,我们可以在类前面加sealed修饰符表示该类无法被继承

image.png image.png

14.其他修饰符

1.static 静态和非静态的区别:

  • 被static修饰的是静态成员,没有被static修饰的是非静态成员(实例成员)
  • 在静态类中可以有静态成员,也可以有非静态成员,但是静态类中只能有静态成员
  • 在类中,静态方法要调用的话只能通过类名.方法名,不能通过对象名.方法名调用

image.png

  • 在静态函数中只能访问静态成员的数据,不能访问非静态成员(实例成员)的数据 image.png

image.png

  • 实例函数中既可以使用静态成员也可以使用实例成员

2.readonly 只能在声明和构造函数中初始化赋值,在其他地方不能修改其值,只能被读取,不能被修改

image.png

5.练习

image.png

image.png

image.png

6.接口

1.为什么需要使用接口

接口相当于是一个规范,接口可以实现多继承,接口指定一组没有函数体的函数成员,也就是说只提供了一些没有函数体的函数,具体怎么实现还要我们在自己的类中去实现。

2.接口的使用

  1. 接口中包含很多没有实现的函数成员,每个成员不需要设置访问修饰符,默认都是 public公开的
  2. 接口中可以放方法,属性(只能用自动属性就是简写模式),索引器,这些的本质其实还是函数
  3. 因为接口中的函数都是没有实现的,所以接口是不能实例化的
  4. 接口可以被类继承,接口可以多继承其他接口

image.png

image.png

image.png

image.png

区别

调用接口中的Eat image.png

  1. 显示实现接口 我们在开发中如果自己的类中有和接口中同名的函数,那么在继承接口的时候,类中的同名函数会被认为是实现接口中的函数,但是我们就想区分出来,另外去实现接口中的函数怎么办呢?

image.png

7.File类处理小文件的读写

1.逐行读取文件中的信息到字符串数组中

image.png 填写文件路径,使用相对路径文件是相对程序集的目录

2.读取文件中的信息到字符串

image.png

3.向文件中写入信息{覆盖形式}

image.png

覆盖后的文件 image.png

4.向文件写入信息(追加的形式)

image.png

8.泛型类

1.为什么要泛型

我们很多时候在往方法传参数都是固定某种类型的数据,但是很多时候我们数据类型可能是多种的,比如你比较两个数的大小有可能是小数也有可能是整数(这里只是举例子),那么你要对不同数据类型进行操作就要使用到泛型

2.如何定义泛型

在class后<泛型名>,当我们创建对象的时候往<>中填写具体类型的名称这样我们就知道传进来的数据是什么类型

image.png

image.png