练习题1
编写一个程序,定义结构(有姓名,年龄,手机号码三个字段),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出。
一、面向对象
1.为什么要使用面向对象编程
我们可以将程序模块块,进行模块划分,每个模块提供特定的功能,这样每个模块都是独立的,互不影响,比如我们创建一个动物类,规定了所有动物都有走路的动能,或者性别的属性等等,如果我们想创建一个动物,比如猫,这个时候我们可以使用该类中有的方法和字段,那如果想创建一个狗对象同样可以用该类生成,同样也会有类中的方法,但这时候狗中的方法和属性都是独立和猫中的方法和字段互不影响,我们从这里可以明显看到面向对象可以提高代码的复用性,我不需要重复的定义函数和变量。
2.类是什么?
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
3.类的基本定义
4.根据类创建对象
5.练习
6.构造函数
1. 构造函数的作用
构造函数会在类构造对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数
2. 构造函数的基本写法
构造函数是类中和类同名的一个方法,当创建对象的时候自动调用该方法,一般用于初始化数据
构造函数中也可以调用对象中的方法,获取对象中的返回值存到对象的字段中
3.属性和字段
1.字段
- 属性的定义
- 属性的特点
- 访问属性和访问字段一样,当取得属性的值得时候,就会调用属性中的get块执行get块中的语句,所以get块需要一个返回值,类型就是属性的类型;当我们去给属性设置值得时候,就会调用属性中的set块,我们可以在set块中通过value访问到我们设置的值
设置只读或者只写,如果我们给属性只设置get块那么就是只读,如如果只设置set块那么就是只写
- 两个访问修饰符
- public公开的的,访问最高权限
- private私有的,只能在类或者结构体内部中使用
9.使用其他项目中的类
- 在本项目中引用其他项目中的命名空间,比如这里我们在demo01项目中引入_demo中的命名空间
- 第一步
- 第二步
- 第三步
注意:想要使用其他项目中的命名空间中的类,那么该类的访问修饰符要设置为public公开的形式
8.匿名类型
当我们不确定数据的类型的时候,我们可以使用关键字var声明变量,那么该变量的类型就由初始化赋的值决定,如果赋的是字符串那么就是字符串类型
9.类的继承
1.为什么需要继承
很多类在项目中可能有相似的数据,比如在一个游戏中Boss类和小怪类Enemy这些类有很多相同的属性,比如血量,攻击值等,所以这个时候我们可以使用继承来让这两个类继承自同个类
2.实现继承的写法
3.base关键字
- 当我们使用继承的时候,可能子类中也会有相同的属性和方法,但是有的时候我们就想使用父类中的属性和方法,这时候我们可以使用base关键字,base表示的就是父类,我们可以通过base.父类中的属性名来获取父类中的属性
- base的第二个使用方式,将子类中的传进来的参数传递给父类的构造方法
10.虚函数(重写父类中的方法)
11.抽象类
1.为什么要有抽象类
比如我们讲的怪物可能都有一技能的,也就是说都会有一个一技能攻击的方法,但是每个怪物的一技能都不一样,有时候在编写项目的时候可能忘记编写子类中一技能的方法,我们可以定义一个抽象父类,抽象类是一个不完整的模板,因为里面有抽象函数,抽象函数可以理解为一个没有函数体的函数,那么我们在使用继承的时候,会提示你编写攻击的函数,否则就会报错,这样可以更加规范我们代码的编写。
定义一个派生类继承抽象类中的方法,这时候会提示你要重写min方法
直接点击提示,实现抽象类
12.常见访问修饰符的了解
- public 访问的最高权限,允许在同个项目或不同的项目中被访问
- private 只允许在类或结构中被访问
- internal 只允许在同个项目中被访问
- protected 只允许在同一个类或结构或者此类的派生类中被访问
13.密封类
当我们创建的类不想被继承的时候,我们可以在类前面加sealed修饰符表示该类无法被继承
14.其他修饰符
1.static 静态和非静态的区别:
- 被static修饰的是静态成员,没有被static修饰的是非静态成员(实例成员)
- 在静态类中可以有静态成员,也可以有非静态成员,但是静态类中只能有静态成员
- 在类中,静态方法要调用的话只能通过类名.方法名,不能通过对象名.方法名调用
- 在静态函数中只能访问静态成员的数据,不能访问非静态成员(实例成员)的数据
- 实例函数中既可以使用静态成员也可以使用实例成员
2.readonly 只能在声明和构造函数中初始化赋值,在其他地方不能修改其值,只能被读取,不能被修改
15.练习题
- 练习1