地藏经70分钟木鱼读诵:帮我看看c#程序

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 09:05:36
帮我看看这个程序的执行结果为什么是:
Values:2,2
Rsfs:125,125
为什么不是:
Values:2,2
Rsfs:125,125
程序如下:
using System;
class Cvalue
{
public int Value=0;
}
class Test
{
static void Main()
{
int val1=2;
int val2=val1;
val2=123;//这个值可要可不要,结果都是一样的,请问为什么?
Cvalue ref1=new Cvalue();
Cvalue ref2=ref1;
ref2.Value=125;
Console.WriteLine("Values:{0},{0}",val1,val2);
Console.WriteLine("Refs:{0},{0}",ref1.Value,ref2.Value);
}
}
请c#爱好者赐教,谢谢!
我错了,应该是
Console.WriteLine("Values:{0},{1}",val1,val2);
Console.WriteLine("Refs:{0},{1}",ref1.Value,ref2.Value);
但是我不知道这题到底要考察c#的那个知识。
结果:
Values:2,123
Rsfs:125,125
//注释也不要了

本程序主要考察数据的存储机制.

int val1=2; //将2赋值给val1,
int val2=val1; //将val2赋值给val2,此时val2的值为2;
int val2=123; //这时val2的值为123;
int类型属于数值类型存储在栈中,重新赋值将冲掉原始值.

Cvalue ref1=new Cvalue(); //调用默认的构造方法来创建对象时,数值类型的成员变量都被初始化为0.

此构造方法属于Cvalue类,是类类型存储在堆中.
用简单的示意图可以这样表示:
Cvalue ref1=new Cvalue();
/*ref1.Value ----- 0;
ref2.Value ----- 0;*/

Cvalue ref2=ref1;
/*ref1.Value _
-
- 0;
ref2.Value --- -- ;*/ //都指向ref2.Value 的0;

ref2.Value=125;//上边的0被125覆盖,所以ref1.Value 和ref2.Value的值都为125;

我是学C#专业的有问题和我联系;
QQ: 541489664
信箱 : maomaocsharp@163.com

Console.WriteLine("Values:{0},{1}",val1,val2);
Console.WriteLine("Refs:{0},{1}",ref1.Value,ref2.Value);

Values:{0},{1}",而不是Values:{0},{0}",

因为Values:后面都是{0}{0},这就决定了其实两值就代表是输出一个值,这也就是val2=123可要可不要的原因