C#数据类型(值类型+引用类型+指针类型)

简介: C#数据类型分三类:值类型(如int、bool,直接存值)、引用类型(如string、object,存内存地址)和指针类型(用于直接内存操作)。值类型继承自System.ValueType,占用栈内存;引用类型在堆中分配,支持装箱/拆箱;指针需在unsafe上下文中使用。

C# 语言中内置了一些基本的数据类型,数据类型用来指定程序中变量可以存储的数据的类型,C# 中的数据类型可以大致分为三类:

  • 值类型(Value types);
  • 引用类型(References types);
  • 指针类型(Pointer types)。

值类型

C# 中的值类型是从 System.ValueType 类中派生出来的,对于值类型的变量我们可以直接为其分配一个具体的值。当声明一个值类型的变量时,系统会自动分配一块儿内存区域用来存储这个变量的值,需要注意的是,变量所占内存的大小会根据系统的不同而有所变化。


C# 中的值类型有很多,如下表所示:


类型 描述 范围 默认值
bool 布尔值 True 或 False False
byte 8 位无符号整数 0 到 255 0
char 16 位 Unicode 字符 U +0000 到 U +ffff '\0'
decimal 128 位精确的十进制值,具有 28~29 个有效位数 (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 0.0M
double 64 位双精度浮点型 (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 0.0D
float 32 位单精度浮点型 -3.4 x 1038 到 + 3.4 x 1038 0.0F
int 32 位有符号整数类型 -2,147,483,648 到 2,147,483,647 0
long 64 位有符号整数类型 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0L
sbyte 8 位有符号整数类型 -128 到 127 0
short 16 位有符号整数类型 -32,768 到 32,767 0
uint 32 位无符号整数类型 0 到 4,294,967,295 0
ulong 64 位无符号整数类型 0 到 18,446,744,073,709,551,615 0
ushort 16 位无符号整数类型 0 到 65,535 0


如果想要获取类型或变量的确切大小,可以使用 sizeof 方法,示例代码如下:

using System;


namespace c.biancheng.net{

   class Program {

       static void Main(string[] args) {

           Console.WriteLine("int 类型的大小为: {0}", sizeof(int));

           Console.ReadLine();

       }

   }

}

编译并执行上述代码,运行结果如下:

int 类型的大小为: 4

引用类型

引用类型的变量中并不存储实际的数据值,而是存储的对数据(对象)的引用,换句话说就是,引用类型的变量中存储的是数据在内存中的位置。当多个变量都引用同一个内存地址时,如果其中一个变量改变了内存中数据的值,那么所有引用这个内存地址的变量的值都会改变。C# 中内置的引用类型包括 Object(对象)、Dynamic(动态)和 string(字符串)。

1) 对象类型(Object)

对象类型是 C# 通用类型系统(Common Type System:CTS)中所有数据类型的最终基类,Object 是 System.Object 类的别名。任何类型的值都可以分配给对象类型,但是在分配值之前,需要对类型进行转换。


将值类型转换为对象类型的过程被称为“装箱”,反之将对象类型转换为值类型的过程则被称为“拆箱”。注意,只有经过装箱的数据才能进行拆箱。

2) 动态类型(Dynamic)

您可以在动态类型的变量中存储任何类型的值,这些变量的类型检查是在程序运行时进行的。动态类型的声明语法如下所示:

dynamic <variable_name> = value;

例如:

dynamic d = 20;

动态类型与对象类型类似,但对象类型变量的类型检查是在编译时进行的,而动态类型变量的类型检查则是在程序运行时进行的。

3) 字符串类型(String)

字符串类型的变量允许您将一个字符串赋值给这个变量,字符串类型需要通过 String 类来创建,String 类是 System.String 类的别名,它是从对象(Object)类型中派生的。在 C# 中有两种定义字符串类型的方式,分别是使用" "@" "


示例代码如下:

//使用引号的声明方式

String str = "http://c.biancheng.net/";

//使用 @ 加引号的声明形式

@"http://c.biancheng.net/";

使用@" "形式声明的字符串称为“逐字字符串”,逐字字符串会将转义字符\当作普通字符对待,例如string str = @"C:\Windows";等价于string str = "C:\\Windows";


另外,在@" "形式声明的字符串中可以任意使用换行,换行符及缩进空格等都会计算在字符串的长度之中。

指针类型

C# 语言中的指针是一个变量,也称为定位器或指示符,其中可以存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针具有相同的功能。


指针类型的声明语法如下所示:

type* identifier;

例如:

char* cptr;

int* iptr;

相关文章
|
3月前
|
人工智能 机器人 数据挖掘
“龙虾”OpenClaw进阶实战指南:阿里云/本地部署+从0到1搭建生产力团队+百炼api配置全攻略
2026年,OpenClaw(俗称“龙虾”,曾用名Clawdbot)已从单纯的AI工具进化为可定制化的“数字员工”底座。但多数用户初次部署后都会陷入困惑:明明安装成功,却只能像普通聊天机器人一样问答,完全发挥不出其自动化生产力价值。其实,OpenClaw的核心魅力不在于“开箱即用”,而在于“按需培养”——它就像一套毛坯房,需要通过定性格、建记忆、装技能、磨合作、做复制的五步SOP,才能打造成贴合自身需求的生产力团队。本文将从**多端部署实操**、**五步养成体系**、**阿里云百炼API配置**、**常见问题排查**四大维度,搭配可直接执行的代码命令,带您从0到1搭建专属OpenClaw生产力
711 2
|
1月前
|
人工智能 Linux Docker
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
推荐一款轻量高效的AI统一API服务镜像——calciumion/new-api,无需复杂配置,依托Docker即可一键极速部署。本文完整讲解Windows、Linux全环境部署流程,全程复制命令就能操作,纯新手也能快速落地,看完直接上手私有AI接口网关搭建。
787 4
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
Figma中文版设计软件!支持UI设计+原型制作+团队协作+代码生成
Figma是主流UI/UX设计工具,支持中文界面、实时协作与跨平台使用。本文提供详细中文版安装指南:解压→运行Figma中文版.exe→用邮箱/Google账号登录,即刻开启高效设计协作。(239字)
Figma中文版设计软件!支持UI设计+原型制作+团队协作+代码生成
|
2月前
|
C#
C# switch语句的用法详解
C#中switch语句用于多分支选择,根据表达式值匹配case执行对应代码块。支持整型、枚举类型,需遵守case值为常量、break防穿透等规则,default为可选默认分支。
|
文字识别 iOS开发 MacOS
【uTools】uTools下载安装图文教程(国产良心软件)
uTools是一款极简、插件化的国产效率工具,通过Alt+Space呼出搜索框,快速调用OCR、翻译、截图等数百款免费插件。“一切皆插件”设计支持高度自定义,适配Windows/macOS/Linux,提升多场景办公效率。(239字)
|
3月前
|
人工智能 JSON 安全
“龙虾”OpenClaw保姆级教程:阿里云/本地部署+百炼API配置+AI Coding可控落地实战+避坑指南
2026年,OpenClaw(俗称“龙虾”,曾用名Clawdbot)的爆火并非偶然,它精准打通了聊天工具、桌面环境与技能系统的壁垒,让用户通过自然对话即可驱动电脑持续执行任务,成为自媒体从业者、独立开发者和企业团队的高效工具。但热潮背后,争议与挑战并存:它并非“零门槛”产品,需具备JSON配置、排障与Skill优化能力;AI Coding的核心痛点不是“生成代码”,而是“可控落地”;团队协作中,效率与规范的平衡更是关键。本文将从OpenClaw核心价值与能力边界、阿里云+本地多系统部署步骤、AI Coding可控落地方案(SPEC驱动)、阿里云百炼Coding Plan API配置四大核心板块
1817 5
|
3月前
|
JavaScript Linux API
OpenClaw“龙虾”干活指南!保姆级部署步骤(阿里云+本地)+ 免费多模型API+30个即用案例分享
2026年,OpenClaw(昵称“龙虾”)的热度持续攀升,成为开源AI智能体领域的现象级工具。但多数用户陷入“装而不用”的困境——跟风部署后,面对丰富的功能生态不知所措,最终让这个强大的自动化工具在设备中“吃灰”。核心问题并非OpenClaw能力不足,而是用户缺乏清晰的落地场景参考,不知道如何将其与日常工作、生活结合。
1440 4
|
6月前
|
开发框架 安全 .NET
ASP.NET Core 依赖注入的三种服务生命周期
本文详解 ASP.NET Core 依赖注入中的三种生命周期:Transient(瞬态)、Scoped(作用域)和 Singleton(单例),解析其创建时机、共享范围及适用场景,帮助开发者合理选择服务生命周期,构建高效、安全、可维护的应用程序。
320 7
|
9月前
|
机器学习/深度学习 新能源 C++
【三相AC-DC-AC PWM变换器】基于三相PWM VSC的电源供应SimPowerSystems模型研究(Simulink仿真实现)
【三相AC-DC-AC PWM变换器】基于三相PWM VSC的电源供应SimPowerSystems模型研究(Simulink仿真实现)
370 6
|
XML JSON Ubuntu
Linux系统之tree命令的基本使用
Linux系统之tree命令的基本使用
1485 4
Linux系统之tree命令的基本使用

热门文章

最新文章