-
目录
-
C#面向对象
一、类
1、类的定义
定义:类用于描述一类事物的信息,对象是这个类中一个具体的个体
2、类的语法
类的语法:
[访问修饰符] class 类名
{
类的描述信息;
}
//访问修饰符:用于描述这个类的访问权限,现在可以不写,有默认值;
//class:关键字,用于声明一个类,和之前枚举的 enum,结构体的 struct 作用是一样的。
//类的描述信息:描述这类事物的特征(字段,属性,方法);
二、对象
1、对象的定义
定义:一个具体的个体,就是一个对象
2、对象的语法
对象的语法:
1)实例化对象:类名 对象名=new 类名();
例如:Apple a1=new Apple();
2)字段的赋值与取值:
赋值:对象名.字段名 = 值; 取值:对象名.字段
//类名:描述这个对象的类,可以是我们自己定义的,也可以是系统提供的;
//对象名:我们要通过这个类创建出来的一个具体的个体的名称;
//new:关键字,实例化的意思,new 类名()就是实例化一个类的对象,通过这个类创建出一个具体的对象出来。
3、类与对象的关系
类用于描述一类事物的信息;
对象是这个类中的一个具体的个体
三、字段
1、字段的定义
定义:字段就是变量,变量在面向对象的类中就叫字段
2、字段的作用
字段的作用:字段和变量的作用一样,都用于存储一些具体信息
3、字段的语法
字段的语法:public 数据类型 字段名
赋值:对象名.字段名=值;取值:对象名.字段名
//public:访问修饰符;数据类型:如int,string,float,double;字段名:即变量名
四、属性
1、属性的作用
作用:属性的作用是对字段进行保护,我们将属性设为 public,可以直接访问,然后属性保护的字段设置成private,我们通过属性间接的操作字段。
2、属性的语法
属性的语法:
public 数据类型 属性名
{
get{return 字段名;}
set{字段名 = value;}
}
//数据类型:和要保护的字段的数据类型一样;
//属性名:和字段名一样,只不过首字母要大写;
//get:当通过属性名取值的时候,会自动调用 get 中的代码;
//set:当通过属性名给字段赋值的时候,会自动调用 set 中的代码;
//value:也是系统关键字,代表赋给属性的值
五、命名空间(文件夹)
1、命名空间的定义
定义:命名空间,也叫名称空间,英文名是namespace。
2、命名空间的作用
命名空间的作用:对代码文件进行分类管理
3、命名空间的语法
定义命名空间:namespace 空间名称{ 类 }
引入命名空间:using 空间名
六、三种方法
1、普通方法
1)普通方法的定义
普通方法定义:普通方法,就是普通函数
2)普通方法的语法
访问修饰符 返回值 方法名(参数列表)
{
方法的具体功能代码;
}
2、构造方法
1)构造方法定义
首先它是一个方法,然后它具有“构造”的作用,所有称之为构造方法。简单点说,构造方法可以对实例化出来的对象进行初始化。
2)构造方法语法
public 类名()
{
构造函数代码;
}
3)构造方法特点
①构造方法要用public 修饰,不能用private 修饰;
②构造方法没有返回值,且连void 也不能写;
③构造方法的方法名字必须跟类名一样;
④构造方法是可以有重载的。
4)注意
当我们的类中不写构造方法的时候,在代码编译后,系统会自动给它添加一个空构造方法,如果我们写了一个构造方法,默认的“空构造方法”就不会存在。
3、析构方法
1)析构方法语法
~类名()
{
析构方法代码体;
}
2)析构方法特点
①析构方法不能有任何参数;
②析构方法无返回值也无访问修饰符;
③析构方法由系统自动调用;
④析构方法可以不写。
七、面向对象开发三大特性
继承、封装、多态
八、继承
1、定义
定义:将一堆类中的一些共有的“成员”单独抽取出来,作为一个父类,然后这一堆类继承这个父类,共享父类的资源,这就叫做继承。
2、继承的好处
①优化代码结构,让类与类之间产生关系(人不是孤立存在的,类也一样);
②提高代码的复用性,便于阅读(写更少的代码,干更多的活);
③为“多态”提供前提(多态是面向对象最复杂的一个特性,后面重点讲解)。
3、继承的语法
子类继承父类,使用“:”冒号关键字符。class 子类:父类
{
//类成员;
}
4、注意
1)子类继承父类私有部分,但是子类无法访问
2)C#不支持多继承
3)C#可以继承多个接口,接口之间用,隔开
5、类视图
1)类视图的作用
可以看到类的继承关系图,以及类中成员概况
2)如何查看?
项目脚本上右键=》视图=》查看类图
3)没有如何装?
工具->获取工具和功能->安装详细信息->单个组件:(勾选)类设计器
6、UML视图
1)类名
2)字段
3)方法
7、子类继承父类中哪些东西?
1)字段
2)属性
3)方法
8、关键字
1)this
关键字this代表当前类的对象
2)base
关键字base代表父类
3)is
is:如果转换成功,返回true,失败返回false
4)as
as:如果转换成功,返回对应的对象,失败返回null
【is和as两个关键字的可以进行类型转换】
9、构造方法
构造方法:子类继承父类,实例化子类,子类构造方法和父类构造方法都会被执行
九、封装
1、封装的作用
作用:隐藏运算过程
2、创建类库
1)新建项目,创建类库
2)生成解决方案
3、使用
1)解决方案右击引用
2)导入类库
3)引入命名空间
十、多态
1、多态的定义
在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为,这就叫做多态。
2、重载
重载:方法名相同,参数列表不同
3、重写
重写特点:方法名相同、参数列表相同、返回值相同
4、虚方法
虚方法:使用virtual关键字定义,当子类继承父类时,可以对父类中的虚方法进行重写(子类中使用override关键字)
十一、抽象方法
1、抽象方法必须写在抽象类中
2、抽象方法的返回值类型前用关键字abstract修饰,且无方法体
十二、抽象类
1、抽象类语法
1)在定义类的关键字 class 前面加 abstract 修饰的类就是抽象类;
2)子类继承抽象类,使用 override 关键字重写父类中所有的抽象方法。
2、注意事项
<1>抽象类中不一定要有抽象方法,但是抽象方法必须存在于抽象类中。
<2>抽象类不能被实例化,因为抽象类中有抽象方法(无方法体),如果真能实例化抽象类的话,调用这些无方法体的方法是没有任何意义的,所以无法实例化。
3、抽象类中可以没有抽象方法
十三、接口
1、接口的定义
接口定义:当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外一种形式来表现,这种形式叫接口。
2、接口的语法格式要求
接口的语法格式要求;
1)接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用“IXxxx”这种方式进行书写,在一堆脚本中通过名字判断,I 开头的都是接口。
2)接口中不能包含字段,但是可以包含属性, 接口中定义的方法不能有方法体,全是抽象方法,但又不需要用 abstract 修饰; 接口中的成员不允许添加访问修饰符,默认都是 public。
3、注意
1)C#不支持多继承但可以继承多个接口,用逗号隔开
2)接口中无字段可有属性,方法是抽象方法,不需要abstract关键字
3)接口中的方法必须全部实现
十四、访问修饰符
1、public [公开访问](常用)
公开的访问权限;
当前类,子类,实例对象,都可以访问到。
2、private [私有访问](常用)
私有的访问权限;
只能在当前类内部进行访问使用;子类,实例对象,都访问不到。
3、protected [保护访问](常用)
受保护的访问权限;
只能在当前类的内部,以及该类的子类中访问;实例对象访问不到。
private+子类可访问
4、internal [内部访问]
只能在当前程序集(项目)中访问;
在同一个项目中 internal 和 public 的访问权限是一样的。
5、protected internal [内部保护访问]
protected + internal 的访问权限。
6、类的默认访问修饰符:internal
十五、设计模式中的六大原则(了解)
1、单一职责原则
只做一件事,不会做其他不相关或者跨界的事情
2、依赖倒置原则
面向接口编程而不是面向实现编程,依赖于抽象,依赖于接口
3、开闭原则
4、接口隔离原则
使用多个专门的接口比使用单一的总接口要好
5、合成复用原则
6、迪米特原则
又叫“最少知道原则”
7、里氏替换原则
父类存在的地方,子类都可以替换,并且行为不发生改变
1、子类对象可以直接赋值给父类变量
例如:class A0 { }
class A1 : A0 { }
internal class Program
{
static void Main(string[] args)
{
//子类对象可以直接赋值给父类变量
A0 a0 = new A0();
A1 a1 = new A1();
a0 = a1;
}
}
2、子类对象可以调用父类中的成员,但是父类对象永远只能调用自己的成员
3、如果父类对象中装的是子类对象,可以将这个父类对象强转为子类对象
十六、静态
1、关键字static
static 关键字,用于修饰类,字段,属性,方法,构造方法等。
被 static 修饰的类称之为“静态类”;
被 static 修饰的成员称之为“静态成员”,被修饰过的成员分别称为:静态字段,静态属性,静态方法,静态构造方法。
2、静态字段
1)概念
被 static 关键字修饰的字段,叫做“静态字段”。
静态字段不属于任何对象,只属于类,必须要用 类名.静态字段名 进行访问, 反过来通过 对象名.静态字段名 的方式是访问不到静态字段的。
2)注意
静态字段是可以重新赋值的,类名.静态字段名 = 新的值;
静态字段存储的数据在内存中只有一份;
实例(对象)字段在内存中会有 N 份,有多少对象就会有多少实例字段;
3、静态属性
1)概念
被 static 关键字修饰的属性,叫做“静态属性”。
静态属性用于对静态字段进行封装,并保证静态字段值的合法性;
静态属性使用 类名.静态属性名 进行访问。
2)注意
静态属性不能用于封装非静态字段,因为静态的类成员是先于非静态的类成员存在的。在还没有对象之前,静态类成员就已经存在了。
4、静态普通方法
1)概念
被 static 修饰的方法,叫做静态方法。直接使用 类名.静态方法名 进行访问
2)注意
控制台程序的 Program 入口类中的 Main 函数就是一个静态方法;
在静态方法中不能调用非静态方法。
5、静态构造方法
1)概念
静态构造方法的作用是用于初始化静态成员。
一个类只能有一个静态构造方法,该静态方法没有任何访问修饰符,也没有参数。可以定义在静态类中,也可以定义在非静态类中。
2)注意
静态构造方法会在程序创建第一个实例,或者引用任何静态成员之前,完成类中静态成员的初始化
6、静态类
1)概念
当类中的成员全部是静态成员的时候,可以把这个类声明为静态类。
声明静态来需要在 class 关键字前加静态关键字 static。
2)注意
静态类中不能存在非静态(实例)成员;
不能被实例化(不能实例化对象)。
7、静态总结
先有静态成员,后有实例成员;
后出现的,可以调用先出现的;
而先出现的则不能调用后出现的。
补充: