C#中值类型和引用类型及类型的转换

在 C# 中,变量分为以下几种类型:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

和Javascript一样,值类型保存在栈中,引用类型值存储在堆中,值的引用保存在栈中。数据操作运算和js一样,值类型复制copy值本身,引用类型复制copy引用指针。有一个区别就是在C#中String类型是引用类型。

值类型

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的,值存储在中。
值类型直接包含数据。比如 int、char、float,它们分别存储数字、字母、浮点数。

引用类型

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
引用位置保存在栈中,数据存储在堆中
换句话说,它们指的是一个内存位置。使用多个变量(栈引用)时,引用类型可以指向一个内存位置(堆)。如果内存位置的数据是由一个变量改变的,其他变量(栈引用)会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。

字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。

C# string 字符串的前面可以加 @(称作”逐字字符串”)将转义字符(\)当作普通字符对待,比如:

string str = @"C:\Windows";

等价于:

string str = "C:\\Windows";
string s1 = "kenny";
string s2 = "kenny";
Console.WriteLine(s1 == s2); //True
Console.WriteLine((Object)s1 == (Object)s2); //True
//公司.Neter说字符串会做缓存处理,其他引用类型不会相等,证实确实这样

指针类型(Pointer types)

指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。
声明指针类型的语法:

type* identifier;

类型转换

  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 - 使用预定义的函数显式完成的。显式转换需要强制转换运算符。
namespace TypeConversionApplication
{
    class ExplicitConversion
    {
        static void Main(string[] args)
        {
            double d = 5673.74;
            int i;

            // 强制转换 double 为 int
            i = (int)d;
            Console.WriteLine(i);
            Console.ReadKey();

        }
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值