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

请自己回答,不要复制别的答案.也不要说什么堆和在栈这个看不懂哦... 请自己回答,不要复制别的答案.
也不要说什么堆和在栈这个看不懂哦
展开
 我来答
mmfy88
推荐于2016-04-17 · TA获得超过196个赞
知道答主
回答量:79
采纳率:0%
帮助的人:72万
展开全部
要理解值类型和引用类型就先理解指针。
指针就是变量存放在内存里的地址,这个地址可以直接找到存储在该地址上的变量。

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

值类型就是传递的该变量的副本,效率相对较低,因为
需要将该变量复制到内存中,然后将复制的内容的传递出去
安富贵台环
2020-01-07 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:31%
帮助的人:707万
展开全部
本质:
-值类型的变量本身就存储着“实例”的内容,即变量的内容就是值本身,有几个变量就有几份值;
-而引用类型的变量,存储的是该引用实例在内存中的首地址,即变量的内容只是个内存地址,多个变量可以指向同一个实例。
例子:
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"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逆风飞扬9985
2008-07-18
知道答主
回答量:85
采纳率:0%
帮助的人:32.7万
展开全部
值类型,传值, 不改变实参的值 内存中存的是数据
像整数类型,浮点类型,字符类型,布尔类型,结构类型等都是值类型

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

值类型用 栈存储
引用类型 用 堆存储
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tdsfl
2008-07-18 · 超过21用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:0
展开全部
简单说 像整数类型 布尔类型 字符类型 实数类型(浮点型、十进制类型)这样的都是 值类型 当然还包括结构类型和枚举类型也是值类型

而像类呀 对象啊 接口啊 数组 委托这些都是引用类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
majunbopm
2008-07-18 · TA获得超过832个赞
知道小有建树答主
回答量:1027
采纳率:0%
帮助的人:1033万
展开全部
示例 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

看完你就会明白滴!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式