C#值传递与引用传递的区别
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:ntl
作者:王子锐
撰写时间:2022/5/28
(全部用字体大小10)
- 首先我们先了解什么是值类型什么是引用类型
值类型:在存储空间中占用了确定量的存储空间。
比如, byte它就占用了一个字节(B),也就是八个二进制(b)表示,即1B=8b。
引用类型:在存储空间中占用不确切的内存。
比如,一个类方法它占用的内存完全按照它的内容决定。
二,通过传递方法,来体现他们的不同之处
using System;
namespace ConsoleApp1
{
class Class1
{
static void Main(string[] args)
{
int mun = 5;
Console.WriteLine("传递前" + mun);
aka(mun);
Console.WriteLine("传递后" + mun);
Program p = new Program();
p.kec = 5;
Console.WriteLine("传递前" + p.kec);
aka1(p);
Console.WriteLine("传递后" + p.kec);
}
static void aka(int value)
{
value = 20;
Console.WriteLine("值传递中");
}
static void aka1(Program p)
{
p.kec = 20;
Console.WriteLine("引用传递中");
}
}
}
Program 类的设置是这样
using System;
namespace ConsoleApp1
{
class Program
{
public int kec;
}
}
上面的方法中
static void aka(int value)
{
value = 20;
Console.WriteLine("值传递中");
}
是值传递的方法,这里的int value传递的是mun的拷贝,所以就算在方法中更改他的值它也不会改变。
而
static void aka1(Program p)
{
p.kec = 20;
Console.WriteLine("引用传递中");
}
因为它这里直接更改的是p.kec是Program类里的kec属性,起到的作用和在类里直接赋值kec是一样的所以值会被更改。
大多数时候值类型都是值传递而引用类型是引用传递。