C#中什么是值类型和引用类型

2024-12-20 20:07:05
推荐回答(5个)
回答1:

要理解值类型和引用类型就先理解指针。
指针就是变量存放在内存里的地址,这个地址可以直接找到存储在该地址上的变量。

引用类型就是传递的指针,直接传递该变量的是地址这样效率很高不需要另外在内存中创建该变量的副本。

值类型就是传递的该变量的副本,效率相对较低,因为
需要将该变量复制到内存中,然后将复制的内容的传递出去

回答2:

本质:
-值类型的变量本身就存储着“实例”的内容,即变量的内容就是值本身,有几个变量就有几份值;
-而引用类型的变量,存储的是该引用实例在内存中的首地址,即变量的内容只是个内存地址,多个变量可以指向同一个实例。
例子:
int
a
=
1;
int
b
=
a;
此时在内存中有两个值,a和b的值都是1,a
=
3后,b仍然是1。
TextBox
a
=
new
TextBox();
TextBox
b
=
a;
a.Text
=
"asdfsdf";
MessageBox.Show(b.Text);
可以发现b.Text也是"asdfsdf",因为a和b都指向同一个TextBox实例,所以反过来b.Text="sss"后,a.Text也会是"sss"

回答3:

值类型,传值, 不改变实参的值 内存中存的是数据
像整数类型,浮点类型,字符类型,布尔类型,结构类型等都是值类型

引用类型是传地址, 改变实参的值 ,内存中存的是数据的内存地址
像数组,字符串都是引用类型

值类型用 栈存储
引用类型 用 堆存储

回答4:

简单说 像整数类型 布尔类型 字符类型 实数类型(浮点型、十进制类型)这样的都是 值类型 当然还包括结构类型和枚举类型也是值类型

而像类呀 对象啊 接口啊 数组 委托这些都是引用类型

回答5:

示例 1:通过值传递值类型
下面的示例演示通过值传递值类型参数。通过值将变量 myInt 传递给方法 SquareIt。方法内发生的任何更改对变量的原始值无任何影响。
using System;
class PassingValByVal{
static void SquareIt(int x)
{
x *= x;
Console.WriteLine("The value inside the method: {0}", x); }
public static void Main()
{
int myInt = 5;
Console.WriteLine("The value before calling the method: {0}", myInt);
SquareIt(myInt);
Console.WriteLine("The value after calling the method: {0}", myInt);
}
}
输出
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5

示例 2:通过引用传递值类型
下面的示例除使用 ref 关键字传递参数以外,其余与“示例 1”相同。参数的值在调用方法后发生更改。

using System;
class PassingValByRef{
static void SquareIt(ref int x)
{
x *= x;
Console.WriteLine("The value inside the method: {0}", x); }
public static void Main()
{
int myInt = 5;
Console.WriteLine("The value before calling the method: {0}", myInt);
SquareIt(ref myInt);
Console.WriteLine("The value after calling the method: {0}", myInt);
}
}
输出
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 25

看完你就会明白滴!