C#学习笔记类和结构体

一、类

类的修饰符
- 无或者internal:只能在同一程序集访问类
- public:同一程序集或者引用该程序集的其他程序集都可以访问
- (internal) abstract:只能在同一程序集访问类,该类不能被实例化,只能被继承
- public abstract:不能被实例化,只能别继承,引用改程序的其他程序集可以使用
- (internal) sealed:只能在同一程序集访问类,该类不能被继承,只能被实例化
- public sealed:不能被继承,只能被实例化,引用改程序的其他程序可以访问类

类的成员修饰符
- public:同一程序集或者引用该程序集的其他程序都可以访问
- private:只能在同一个类中访问
- protected:只能在同一个类或者派生类访问
- internal:只有同一程序集可以访问
- protected internal:同一程序集,该类和派生类中可以访问

static变量只能用类名进行访问,不能用对象去访问
const类型默认是静态类型的,也只能通过类名去访问

构造函数
单例类的创建需要使用私有构造函数

静态构造函数:除了实例构造函数之外,静态构造函数用于初始化类中的静态成员,在创建第一个实例或者引用任何静态成员之前,CLR都会自动调用静态构造函数。 (静态构造函数不会覆盖默认无参构造函数)
静态构造函数特点:
1.静态构造函数不能使用任何访问修饰符
2.静态构造函数不能带有任何参数
3.静态构造函数只会执行一次
4.不能直接调用静态构造函数
5.程序员无法直接控制静态构造函数调用时机
析构函数
只有在C#中嵌套了其他语言的时候,才会用到析构函数,其他情况都不会用到,因为C#里面的内存是自动管理的。C#中在堆上开辟的内存释放会自动调用基类的Finalize()方法。
注意:1、不能在结构体中定义析构函数,只能在类中
2、一个类只能有一个
3、无法继承或者重载析构函数
4、无法显示的调用析构函数,由垃圾回收器自动调用
5、析构函数即没有修饰符也没有参数
索引器
当一个类包含数组成员时,使用索引器相当于C++里面的下标运算符重载
[修饰符] 数据类型 this [索引类型 index] {
get{}
set{}
}

C#中只有单继承没有多继承,静态类没有继承
子类的初始化顺序:子类实例字段,基类构造函数,子类构造函数
多态
virtual可以修饰方法,索引器和字段,在子类里面可以使用它override进行重写。
在实际开发中,若确实需要添加某个方法,但是该方法又是基类的同名方法,那么可以使用new关键字把基类成员方法隐藏。

二、结构体

1、实例构造函数
有一个没有参数的构造函数,还会一直存在,不允许被删除和重定义,不会因为定义其他的带参数的构造函数而消失。
2、静态构造函数
特点:1、不能有访问修饰符和参数;2、不能访问实例成员;3、无法直接进行调用
被调用的两种情况:1、使用显示声明的构造函数进行初始化,使用默认构造函数初始化不会调用;2、使用结构的方法或者访问结构的静态数据成员(访问实例成员不会触发)
3、结构体的多态和可继承性
结构体是隐式密封的,不能作为基机构派生其他的结构;不能从类派生,可以从接口继承;
特点:1、隐式密封,不能使用sealed和abstract关键字;2、因为不能作为基类,成员不能使用有关protected的修饰符;3、结构体成员函数不能声明为abstract和virtual,可以使用override,用来覆盖它的基类System.ValueType中的方法
4、结构体和类的对比
结构体个类的对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值