C# 哪些是值类型,哪些是引用类型

  1. 值类型

    • 基本数据类型
      • 整数类型:包括sbyte(有符号8位整数)、byte(无符号8位整数)、short(有符号16位整数)、ushort(无符号16位整数)、int(有符号32位整数,是最常用的整数类型)、uint(无符号32位整数)、long(有符号64位整数)、ulong(无符号64位整数)。例如,int num = 10;,这里num变量直接存储了值10
      • 浮点类型float(单精度浮点数)和double(双精度浮点数)。比如double pi = 3.14;,变量pi存储的是3.14这个实际的值。
      • 十进制类型decimal,它主要用于高精度的金融计算等场景,例如decimal money = 10.0m;(注意这里的m后缀是用来明确表示这是一个decimal类型的值)。
      • 布尔类型bool,它只有两个值truefalse,例如bool isTrue = true;,变量isTrue直接存储了true这个值。
      • 字符类型char,用于存储单个字符,例如char ch = 'A';,变量ch存储了字符'A'的值。
    • 枚举类型(Enum)
      • 枚举是一种用户定义的值类型。例如定义一个表示星期几的枚举:
      enum WeekDays
      {
          Monday,
          Tuesday,
          Wednesday,
          Thursday,
          Friday,
          Saturday,
          Sunday
      }
      
      • 当使用WeekDays day = WeekDays.Monday;时,day这个变量存储的是枚举值Monday对应的整数值(默认从0开始,Monday为0,Tuesday为1,以此类推),它是一个值类型。
    • 结构体(Struct)
      • 结构体是一种可以包含多个不同类型成员的数据结构。例如:
      struct Point
      {
          public int X;
          public int Y;
      }
      
      • 当创建一个结构体变量Point p; p.X = 1; p.Y = 2;时,变量p直接存储了XY的值,是值类型。
  2. 引用类型

    • 类(Class)
      • 类是面向对象编程的基本构建块。例如定义一个简单的Person类:
      class Person
      {
          public string Name;
          public int Age;
      }
      
      • 当创建一个Person对象Person p = new Person(); p.Name = "John"; p.Age = 30;时,变量p存储的是对象在堆内存中的引用地址,而不是对象的实际数据。
    • 接口(Interface)
      • 接口定义了一组方法签名,但没有具体的实现。例如:
      interface IAnimal
      {
          void MakeSound();
      }
      
      • 当一个类实现这个接口时,通过接口类型的变量引用这个对象,该变量存储的也是对象的引用,如IAnimal animal = new Dog();(假设Dog类实现了IAnimal接口)。
    • 委托(Delegate)
      • 委托是一种用于存储方法引用的类型。例如定义一个委托类型:
      delegate void MyDelegate(int value);
      
      • 当把一个方法赋值给委托变量时,如MyDelegate del = Method1;(假设Method1是一个符合委托签名的方法),del变量存储的是Method1方法的引用。
    • 数组(Array)
      • 数组可以存储多个相同类型的元素。例如int[] numbers = new int[5];numbers变量存储的是数组在内存中的引用,通过这个引用可以访问数组中的元素。
    • 字符串(String)
      • 在C#中,string是引用类型,虽然它的行为在很多方面类似于值类型。例如string str = "Hello";str变量存储的是字符串对象在内存中的引用。但C#编译器对string类型进行了特殊处理,使得它在赋值和参数传递等操作时表现得更像值类型,这种处理称为字符串驻留。

需要注意的是,值类型变量直接存储其数据,而引用类型变量存储的是数据在内存中的引用地址,这是它们之间的本质区别。这种区别会影响到变量的赋值、参数传递等操作的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命不息-学无止境

你的每一份支持都是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值