请教一个C#中变量作用域中的问题

classProgram{privateint_SiteId=3;staticvoidMain(string[]args){Programpro=newProgram()... class Program
{
private int _SiteId = 3;
static void Main(string[] args)
{
Program pro=new Program ();

Console.Write(pro._SiteId);
pro._SiteId = 4;
Console.Write(pro._SiteId);
pro.Test3();
Console.ReadKey();
}

public void Test3()
{
Program pro1 = new Program();
pro1._SiteId = 5;
Console.Write(pro1._SiteId); //这是5
Console.Write(_SiteId); //为什么这是4呢?
}
}
展开
 我来答
ltoiii
2013-06-13 · TA获得超过634个赞
知道小有建树答主
回答量:182
采纳率:80%
帮助的人:57.1万
展开全部
static void Main(string[] args) {
Program pro=new Program (); // pro._SiteId=3
Console.Write(pro._SiteId); // 第1个输出:3
pro._SiteId = 4;
Console.Write(pro._SiteId); // 第2个输出:4
pro.Test3(); // 调用了pro对象的Test3(),注意:pro的_SiteId是4,后面要用到
//为分析方便把Test3()代码写在下面
Program pro1 = new Program();// 进入Test3
pro1._SiteId = 5;
Console.Write(pro1._SiteId); //第3个输出:5
Console.Write(_SiteId); //为什么这是4呢?别忘了,这里是要显示pro的_SiteId,它是多少来着?看上面那个“注意:”.第4个输出:4
Console.ReadKey(); // Test3结束
}
public void Test3()
{
Program pro1 = new Program();
pro1._SiteId = 5;
Console.Write(pro1._SiteId); //这是5
Console.Write(_SiteId); //为什么这是4呢?
}
追问
Console.Write(_SiteId);     //为什么这是4呢?别忘了,这里是要显示pro的_SiteId,它是多少来着?看上面那个“注意:”.第4个输出:4

----------------------------------------
Console.Write(_SiteId); 这个为什么是调用pro的——Siteid 而不是 pro1的
ahdung
2013-06-13 · TA获得超过609个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:266万
展开全部
其实这个不是作用域的问题,而是一条基本道理:同一个类的不同实例拥有各自的数据/状态,除非是静态字段。上述代码中,pro1._SiteId是pro1这个实例的,_SiteId是pro的,互不相干
追问
Console.Write(_SiteId); 这个为什么是调用pro的——Siteid 而不是 pro1的
追答
因为你在main中,是用pro.Test3()执行该方法,所以方法内部访问的字段就是pro实例的,就跟this._SiteId一样,隐去this也是一回事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ce9f999
2013-06-13 · TA获得超过406个赞
知道小有建树答主
回答量:540
采纳率:100%
帮助的人:546万
展开全部
其实嘛,楼上的各位回答也是对的,但是没说到点子上。
其实我们回过来看一下,你有疑问的那句话所表示的意思
意思很简单:打印一个变量到屏幕(这当然是废话……)
那么这个变量是什么?答,打印的是当前方法所在类里面的一个变量值,了解这个,这就能理解为什么是4了。
再多说一点
因为类是引用对象,那么类里面的成员呢,也是跟着类的变化而变化。
我们再重新理解上面那句话,Test3在调用的时候,它是在pro这个类实例里面的吧,那么这个实例类里面的这个变量是什么呢,很明显就是你前面修改成的4嘛
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-13
展开全部
private int _SiteId = 3;是全局变量,类内任何一个方法都可以调用、改变它的值,
pro1._SiteId = 5;作用只在Test3
主方法内:pro._SiteId = 4;已经改变了_SiteId的值为4
Test3调用 全局变量 输出 _SiteId
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
william11zhu
2013-06-13
知道答主
回答量:4
采纳率:0%
帮助的人:5857
展开全部
变量的作用域在大括号之间。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式