当前位置: 首页 > news >正文

C# 基本数据类型

目录

一、按核心类别划分(值与引用)

1. 值类型 (Value Types)

2. 引用类型 (Reference Types)

二、按定义方式划分

1. 内置类型(预定义类型)

2. 用户自定义类型

三、其他重要类型

1. 泛型类型 (Generic Types)

2. 动态类型 (dynamic)

3. 指针类型 (Pointer Types)

总结与对比


一、按核心类别划分(值与引用)

1. 值类型 (Value Types)

变量直接包含其本身的数据。分配在上(但如果是引用类型的成员变量,则会随对象存在于堆上)。    

结构体 (struct)

  • 数值类型:包括所有整数类型(intbytelong等)、浮点类型(floatdouble)和高精度decimal

  • 布尔类型 (bool)true 或 false

  • 字符类型 (char):表示一个 UTF-16 代码单元。

  • 用户自定义结构体:使用 struct 关键字定义。

  • 枚举 (enum):用户自定义的一组命名常量,例如 public enum Season { Spring, Summer, Autumn, Winter }

  • 可空值类型 (Nullable Value Types):在类型后加 ?,允许值类型为 null,如 int? nullableInt = null;。它是 System.Nullable<T> 结构的语法糖。

2. 引用类型 (Reference Types)

变量存储的是对数据所在内存地址的引用(指针)。数据本身分配在托管堆上。

  • 类 (class)

    • 万物之基:objectSystem.Object),所有类型的基类。

    • 字符串:stringSystem.String),不可变的字符序列。

    • 用户自定义类:使用 class 关键字定义。这是最常见的引用类型。

  • 接口 (interface):使用 interface 关键字定义的一组契约。它本身不是类,但类可以实现接口。

  • 数组 (Array):无论元素是值类型还是引用类型,数组本身是引用类型。例如 int[]string[,]

  • 委托 (delegate):一种指向方法的类型,类似于 C/C++ 中的函数指针,但更安全。

二、按定义方式划分

1. 内置类型(预定义类型)

C# 语言直接提供的关键字,如 intdoubleboolcharstringobject 等。它们实际上是 .NET 类库中类型的别名。

C# 关键字.NET 类型(实际类型)类别
intSystem.Int32值类型
doubleSystem.Double值类型
boolSystem.Boolean值类型
charSystem.Char值类型
stringSystem.String引用类型
objectSystem.Object引用类型
2. 用户自定义类型

程序员根据需求自己定义的类型。

  • class:定义类。

  • struct:定义结构体。

  • interface:定义接口。

  • enum:定义枚举。

  • delegate:定义委托。

三、其他重要类型

1. 泛型类型 (Generic Types)

允许在定义类、接口、方法时使用类型参数(如 T),从而创建可适用于多种数据类型的、类型安全的代码。

  • 例如:List<T>Dictionary<TKey, TValue>,以及自定义的 MyClass<T>

2. 动态类型 (dynamic)

在编译时绕过类型检查,在运行时再解析类型。主要用于与 COM API、动态语言(如 IronPython)交互等场景。

  • 声明:dynamic dynVar = "This can be anything";

3. 指针类型 (Pointer Types)

仅在不安全代码块中使用,用于直接操作内存地址。通常用于与底层系统交互或性能极度敏感的场景。

  • 声明:int* p; (需要使用 unsafe 关键字)

总结与对比

特性值类型引用类型
存储内容数据本身数据的引用(内存地址)
内存位置(通常)
赋值操作复制数据,创建独立副本复制引用,指向同一对象
参数传递默认按值传递(传递副本)默认按引用传递(传递引用的副本)
内存管理栈回收自动释放,高效垃圾回收器(GC) 管理
默认值0false 等null
示例intstructenumstringclassarray
http://www.dtcms.com/a/342944.html

相关文章:

  • 生信分析自学攻略 | R语言数据筛选和修改
  • 前端:文件直接在浏览器里下载
  • VMware ESXi 服务器暴露高危漏洞,中国1700余台面临勒索软件威胁
  • UE 虚幻引擎, unreal engine(1)概略介绍,安装本引擎,创建账户,打开 UE,创建项目,项目导入内容,尝试运行的添加第一人称游戏,
  • Vibe Coding v.s Prompt Engineering
  • 【Docker】在Ubuntu22.04上安装Docker
  • 漫谈《数字图像处理》之平滑
  • 智能编码工具:GitHub Copilot 的深度应用与集成
  • 用OpencvSharp编写视频录制工具
  • HTTP/2 性能提升的核心原因
  • Vue2 ElementUI Upload组件http-request用法
  • (二十一)深入了解AVFoundation-编辑:导出视频与格式转换的全流程
  • 全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions
  • DeepSeek-V3.1 发布,迈向 Agent 时代的第一步
  • 0821 sqlite3_get_table函数(数据库函数的补充)
  • Nacos-9--认识Nacos中的Distro协议(Nacos高可用的实现原理)
  • visual studio编译的软件查找所依赖的运行库方法
  • 基于单片机智能路灯控制
  • 学习嵌入式第三十四天
  • 杂记 07
  • BGP高级特性
  • AI论文速读 | 多模态能否助力时间序列预测?时序预测中融合文本的边界与条件
  • Oracle CLOB类型转换
  • 数据分析三剑客
  • 如何解读京东按图搜索(拍立淘)API(jd.item_search_img)的返回值
  • AI大模型支持下的:CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
  • JVM-(7)堆内存逻辑分区
  • 3个脱节,5大特征,1套方法:破解AI落地难题
  • 37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization
  • 【互动屏幕】大屏拼接在数字展厅展示上有哪些优势?