C#基本类型

177 阅读4分钟

C# 的基本类型(primitive types)是语言内置的数据类型,它们直接映射到 .NET 的系统类型,广泛用于程序开发中。理解这些类型,对于高效、健壮的 C# 编程至关重要。

基本类型可以分为两类:值类型和引用类型。

一、值类型(Value Types)

值类型直接存储数据,它们存储在栈上,赋值和参数传递时会复制全部内容。常见的值类型包括数字、布尔值、结构体等。

C#类型.NET类型占用字节取值范围简介示例代码
sbyteSystem.SByte1-128 ~ 127有符号8位整数sbyte a = -10;
byteSystem.Byte10 ~ 255无符号8位整数byte b = 200;
shortSystem.Int162-32,768 ~ 32,767有符号16位整数short c = -100;
ushortSystem.UInt1620 ~ 65,535无符号16位整数ushort d = 500;
intSystem.Int324-2,147,483,648 ~ 2,147,483,647有符号32位整数int e = 1000;
uintSystem.UInt3240 ~ 4,294,967,295无符号32位整数uint f = 3000;
longSystem.Int648-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807有符号64位整数long g = 1L;
ulongSystem.UInt6480 ~ 18,446,744,073,709,551,615无符号64位整数ulong h = 2UL;
nintSystem.IntPtr4/8平台相关(指针大小)有符号本机整数nint ni = 123;
nuintSystem.UIntPtr4/8平台相关(指针大小)无符号本机整数nuint nu = 456;
floatSystem.Single4~7位小数单精度浮点数float f = 3.14f;
doubleSystem.Double8~15-16位小数双精度浮点数double d = 2.718;
decimalSystem.Decimal1628-29位小数高精度十进制数decimal m = 1.23m;
boolSystem.Boolean1true/false逻辑布尔类型bool flag = true;
charSystem.Char2Unicode字符(0~65535)单一Unicode字符char ch = 'A';
C#类型.NET类型简介示例代码
enum(自定义)枚举类型enum Day { Mon, Tue } Day today = Day.Mon;
struct(自定义 struct)用户自定义结构体struct Point { int X; int Y; }
record struct(自定义 record struct)记录结构体(不可变/值类型)public record struct R(int X);
TupleSystem.ValueTuple值元组类型var t = (1, "A");
可空类型System.Nullable支持null的值类型int? n = null;

二、引用类型(Reference Types)

引用类型存储数据的引用(指向数据的位置)。这些类型的数据存储在堆中,变量之间赋值时传递的是引用。

C#类型.NET类型简介示例代码
stringSystem.String不可变字符串string s = "hi";
objectSystem.Object所有类型的基类object o = 123;
dynamicSystem.Object动态类型,运行时绑定dynamic d = "abc";
class(自定义 class)引用类型对象class C { } C x = new C();
record(自定义 record)记录类型(不可变/引用类型)public record Person(string Name);
接口(自定义 interface)行为约定interface I { }
数组T[]引用类型,元素类型可为任意int[] arr = {1,2,3};
委托System.Delegate封装方法引用Action a = () => { };
  • string 是一个特殊的引用类型,用于表示文本数据。它是一个不可变的类型,因此每次修改字符串都会创建一个新对象。对于大量拼接字符串,推荐使用 StringBuilder。

三、总结

  • 值类型:效率高,适合简单、小型、频繁创建销毁的数据。
  • 引用类型:更灵活,适合复杂、可共享、生命周期长的对象,但可能涉及更多内存管理。
  • 值传递:值类型赋值会复制全部数据,互不影响。
  • 引用传递:引用类型赋值仅复制地址,多个变量可指向同一对象。
  • 内存管理:值类型通常存储在栈上,引用类型存储在堆上。
  • 装箱与拆箱:值类型转object/interface时会装箱,频繁装箱影响性能,泛型可规避。
  • 类型安全:C#是一种强类型语言,类型错误通常在编译时捕获,这有助于减少运行时错误。可空值类型(如int?)降低空引用异常;C# 8+ 推荐开启可空引用类型(如:string?),提升代码健壮性。

本文整理了目前C#常见的基本类型表格,有些重要的类型接下来会单独写文章继续总结。