Skip to content

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新增

程序集

简单理解就是共同生成一个可执行文件或动态链接库的所有源文件集合。

  • 顶层的类和结构体(没有嵌套在其他类或结构体中)可以声明publicinternal(默认)或file。顶层的接口可以声明publicinternal。(感觉顶层类和结构体声明为public就行了额)
  • 结构体的成员(包括嵌套的类和结构体)可以声明为publicinternalprivate(默认)。
  • 类成员(包括嵌套的类和结构体)和接口成员可以声明为除了file之外的其它访问修饰符,类成员默认访问级别是private,而接口成员的默认访问级别是public
  • 仅允许在顶级类型声明中使用file访问修饰符。

继承

  • C#类继承不能像C++那样指定访问修饰符来声明何种继承方式。
  • C#不支持多重继承,但可实现多个接口。
  • 派生类不能具有高于其基类型的可访问性。比如基类为internal,则派生类不能为public

多态

实现方式:

  • 重新定义:在派生类中使用关键字new来重新定义基类方法,通过不同的派生类调用同名方法。
  • 虚函数:基类使用virtual声明虚函数,派生类使用关键字override来重写该方法。通过基类对象来调用虚函数,但实际传参是派生类对象。
  • 抽象方法:抽象基类声明抽象方法,派生类使用关键字override来实现该抽象方法。调用方式同虚函数一样。

抽象类

C#有专门的关键字abstract来声明抽象类。

  • 抽象类中用abstract声明的方法为抽象方法,抽象类的派生类必须实现所有抽象方法。
  • 抽象类中可定义非抽象方法和非抽象属性。
本站访客数 人次 本站总访问量