C# 值类型(Value Types)

值类型直接存储数据,分配在栈内存中,效率较高。

  • 整数类型byte(0-255)、sbyte(-128-127)、short(-32,768-32,767)、ushort(0-65,535)、int(-2.1亿-2.1亿)、uint(0-42亿)、long(-9e18-9e18)、ulong(0-18e18)。
  • 浮点类型float(7位精度,后缀f)、double(15-16位精度,默认小数类型)、decimal(28-29位精度,适用于财务计算,后缀m)。
  • 其他char(Unicode字符)、booltrue/false)、struct(自定义值类型)。

示例代码

int num = 42;
decimal price = 19.99m;
char letter = 'A';


C# 引用类型(Reference Types)

引用类型存储数据的地址,数据本身在堆内存中,通过垃圾回收机制管理。

  • 常见类型classinterfacestringobjectdynamic数组
  • 字符串string为不可变类型,修改时会创建新对象。
  • 动态类型dynamic在编译时跳过类型检查,运行时解析。

示例代码

string name = "Alice";
int[] numbers = { 1, 2, 3 };
dynamic obj = new ExpandoObject();


类型转换(Type Conversion)

  • 隐式转换:小范围类型自动转大范围类型(如intlong)。
  • 显式转换:通过强制类型转换或Convert类(可能引发异常)。
  • 方法支持Parse()TryParse()用于字符串转其他类型。

示例代码

double d = 3.14;
int i = (int)d; // 显式转换,结果为3

string input = "123";
bool success = int.TryParse(input, out int result); // 安全转换


可空类型(Nullable Types)

值类型可通过?修饰符允许null值,常用于数据库交互或可选参数。

示例代码

int? nullableInt = null;
if (nullableInt.HasValue)
{
    Console.WriteLine(nullableInt.Value);
}


装箱与拆箱(Boxing & Unboxing)

  • 装箱:值类型转为object引用类型,存在性能开销。
  • 拆箱:将object转回值类型,需显式指定类型。

示例代码

int value = 42;
object boxed = value; // 装箱
int unboxed = (int)boxed; // 拆箱


类型推断与var关键字

  • var:编译器根据赋值推断类型,仅用于局部变量。
  • 限制:无法用于字段或返回值类型声明。

示例代码

var list = new List<int>(); // 推断为List<int>
var count = 10; // 推断为int


常用类型操作

  • sizeof():获取值类型内存大小(如sizeof(int)返回4)。
  • typeof():获取类型的System.Type对象(如typeof(string))。
  • isas:类型检查与安全转换。

示例代码

if (obj is string)
{
    string s = obj as string;
    Console.WriteLine(s.ToUpper());
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐