C#第八节

91 阅读4分钟

回顾练习

编写一个程序,定义结构(有姓名,年龄,手机号码三个字段),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出。

image.png

一.面向对象

1. 为什么要使用面向对象

  • 我们可以将程序模块化,每个模块提供特定的功能这样每个模块都独立互不影响,可以提高代码的复用性
  • 面向对象就是继承、封装、多态

2. 什么是类

类是实际上创建对象的模板,每个对象都包含数据,每个对象都提供了处理和访问数据的方法

3. 类的基本结构

image.png

image.png

4. 练习

image.png

image.png

二.构造函数

1.构造函数的作用:构造函数会在类实例化对象的时候调用自己,一般用于初始化数据

2.构造方法的基本写法

image.png

image.png 构造函数中也可以调用对象中的方法,获取对象中的返回值存到对象的字段中

image.png

3. 属性和字段

image.png

image.png

4. 属性的特点:

  • 访问属性和访问字段一样,当取得属性值的时候就会调用属性的get语句块,会执行get中的语句块,所以get需要一个访问值,类型就是属性值的类型,当我们给属性设置值的时候,就会调用属性中的set语句块,我们可以在set中的value值中获取到我们设置的值。

image.png 设置只读或者只写,如果我们给属性只设置get块那么就是只读,如如果只设置set块那么就是只写

image.png

5.匿名类型

定义:当我们不确定数据的类型的时候,可以使用关键字var声明变量,那么该变量的类型就是由初始化赋的值所决定的,如果赋的是字符串那么就是字符串类型,如果赋的是整数型那么就是整数类型

image.png

6. 类的继承

  • 为什么需要继承?
  • 很多类在项目中可能有很多相似的地方,使用类的继承可以提高代码的复用,减少冗余
  • 使用继承的写法:

image.png

image.png

7. base关键字

  • 当我们使用继承的时候,可能子类也有相同的属性和方法,但有的时候我们就想要使用父类中的属性和方法所以就使用base关键字,base表示的就是父类,我们可以通过base.属性名来获取父类中的属性

image.png

  • base的第二种使用方式,将子类中的传进来的参数传递给父类的构造方法

image.png

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

image.png

image.png

9. 抽象类

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

image.png 注意:抽象类是不能进行实例化

image.png

image.png

10.常见的访问修饰符

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

11.密封类

当我们创建的类不想被继承的时候,使用sealed修饰符表示无法被继承

image.png

12.静态类和非静态类的区别

  • 使用static修饰符修饰的是静态成员,没有使用static是非静态成员(实例化成员)
  • 静态类中只可以有静态成员,不能有非静态成员非静态类中可以有静态成员和非静态成员
  • 静态方法的调用只能通过类名.方法名,不能实例化一个对象使用对象.方法调用

image.png

image.png

image.png

13.readonly只读

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

image.png

image.png

image.png