【C#】ref 关键字详解

创建一个对象首先会在内存栈中分配4个字节用来存储该对象在堆中存放的地址,然后根据对象成员类型在堆中分配对应的空间存储对象,获得一个堆中内存的地址存放在栈中分配的四个字节中。从代码示例中可以看到,当我们使用传值参数时在方法中对值类型 形参x增加,并不会影响到实参x,因为传值参数→值类型的时候是在内存中开辟一个新的地址把实参拷贝过去,当我们对形参进行修改其实是对拷贝的数据修改,不会影响到实参。值类型在内存中存在栈中,根据变量的类型不同,在栈中分配响应的字节。图片解释:(来自刘铁猛C#入门视频)
摘要由CSDN通过智能技术生成

目录

一、须知概念

1.值类型:

2.引用类型:

二、ref

1.传值参数→值参数

2.传值参数→引用类型,并且创建新对象

3.传值参数→引用类型,只操作对象,不创建新对象

4.引用参数→值参数

5.引用参数→引用类型,并且创建新对象

6.引用参数→引用类型,不创建新对象只改变对象值


一、须知概念

1.值类型:

结构体类型、枚举类型

值类型在内存中存在栈中,根据变量的类型不同,在栈中分配响应的字节。

2.引用类型:

类、接口、委托

引用类型在内存中的存储分为两个部分。string x=new string();  创建一个对象首先会在内存栈中分配4个字节用来存储该对象在堆中存放的地址,然后根据对象成员类型在堆中分配对应的空间存储对象,获得一个堆中内存的地址存放在栈中分配的四个字节中。

二、ref

1.传值参数→值参数

图片解释:(来自刘铁猛C#入门视频)

 代码示例:

static void Main(string[] args)
{
    Student stu=new Student();
    int x=100;
    stu.Add(x);
    Console.WriteLine(x);//打印 100
}

class Student
{
    public void Add(int x)
    {
       x = x + 1;
       Console.WriteLine(x);//打印 101
    }
}

打印预览:

从代码示例中可以看到,当我们使用传值参数时在方法中对值类型 形参x 增加时,并不会影响到实参x,因为在传递传值参数→值类型的时候是在内存中开辟一个新的地址把实参拷贝过去,当我们对形参进行修改其实是对拷贝的数据修改,不会影响到实参。

2.传值参数→引用类型,并且创建新对象

图片解释:(来自刘铁猛C#入门视频)

  代码示例:

static void Main(string[] args)
{
    Student stu = new Student() { Name = "张三" };
    //打印Name:李四,Hash:58225482
    MetHodTest(stu);

    //打印Name:张三,Hash:54267293
    Console.WriteL
  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值