Appearance
C#
更新: 5/12/2025 字数: 0 字 时长: 0 分钟
数据类型
简单值类型就是我们常见的基础数据类型,如int、bool、float等。
Collection类似python的容器,如数组、字典、队列等。
值类型类似python的不可变对象,引用类型类似python的可变对象。函数传参类型为值类型时,函数内部修改不会影响外部的值;函数传参类型为引用类型时,函数内部修改会改变外部的值。
参考文档:
结构体
- 结构体不支持继承(不同于C++),但可以实现接口。
ref struct
只能在栈上分配,不能在堆上分配;而struct
可以分配在堆或栈上。前者主要用于高性能场景,较少使用,一般开发使用struct
即可。
接口
- 接口无法直接实例化,其成员由实现接口的任何类或结构来实现。
面向对象
封装
访问修饰符 | 描述 | 备注 |
---|---|---|
public | 都可访问 | |
protected | 类本身及其派生类可见 | |
internal | 当前程序集可见 | |
protected internal | 当前程序集或派生类可见 | |
private | 类本身可见 | |
private protected | 类本身及其当前程序集中的派生类可见 | C#7.2新增 |
file | 已声明的类型仅在当前源文件中可见 | C#11新增 |
程序集
简单理解就是共同生成一个可执行文件或动态链接库的所有源文件集合。
- 顶层的类和结构体(没有嵌套在其他类或结构体中)可以声明
public
、internal
(默认)或file
。顶层的接口可以声明public
和internal
。(感觉顶层类和结构体声明为public
就行了额) - 结构体的成员(包括嵌套的类和结构体)可以声明为
public
、internal
或private
(默认)。 - 类成员(包括嵌套的类和结构体)和接口成员可以声明为除了
file
之外的其它访问修饰符,类成员默认访问级别是private
,而接口成员的默认访问级别是public
。 - 仅允许在顶级类型声明中使用
file
访问修饰符。
继承
- C#类继承不能像C++那样指定访问修饰符来声明何种继承方式。
- C#不支持多重继承,但可实现多个接口。
- 派生类不能具有高于其基类型的可访问性。比如基类为
internal
,则派生类不能为public
。
多态
实现方式:
- 重新定义:在派生类中使用关键字
new
来重新定义基类方法,通过不同的派生类调用同名方法。 - 虚函数:基类使用
virtual
声明虚函数,派生类使用关键字override
来重写该方法。通过基类对象来调用虚函数,但实际传参是派生类对象。 - 抽象方法:抽象基类声明抽象方法,派生类使用关键字
override
来实现该抽象方法。调用方式同虚函数一样。
抽象类
C#有专门的关键字abstract
来声明抽象类。
- 抽象类中用
abstract
声明的方法为抽象方法,抽象类的派生类必须实现所有抽象方法。 - 抽象类中可定义非抽象方法和非抽象属性。