学习C# : day 9 2023/9/14

一、类

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、静态总结

先有静态成员,后有实例成员;

后出现的,可以调用先出现的;

而先出现的则不能调用后出现的。

补充:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾筱黎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值