H_J_H
------专用杂物房
posts - 26, comments - 1, trackbacks - 0, articles - 119
导航
IT博客
首页
新随笔
联系
聚合
管理
公告
这里没有原创,只有转贴。没有别人,只有自己。没有你需要的,只有我需要的。 -----本Blog只方便于本人工作和学习编程而设立,所以只进行本人所需技术文章保存用,且全为转贴。
<
2005年8月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
(26)
2006年3月 (2)
2006年2月 (5)
2005年12月 (1)
2005年10月 (1)
2005年9月 (1)
2005年8月 (16)
文章分类
(45)
AJAX系列(21)
Asp.Net控件学习/资料
Asp/Asp.Net 集锦大集合(4)
C#学习(4)
HTML网页设计学习与技巧(2)
HttpModule系列
SQL
Visual Studio 2005 系列
Wap开发
工程开发(2)
思想算法
系统技巧(1)
网络应用(4)
美工技巧(7)
文章档案
(119)
2006年11月 (7)
2006年7月 (1)
2006年6月 (7)
2006年5月 (19)
2006年4月 (21)
2006年3月 (13)
2006年2月 (29)
2006年1月 (12)
2005年12月 (6)
2005年11月 (1)
2005年10月 (3)
搜索
最新评论
1. re: 一个无刷新二级联动下拉列表,同样适用与firefox,这算ajax么?
dfgdfgfhgf
--dfgfdg
阅读排行榜
1. 用实例解说Dot Net设计模式——装饰模式(231)
2. 创建型模式之间的比较(225)
3. Dot NET设计模式—反射工厂(198)
4. Dot Net设计模式—MVC模式 (197)
5. 一步一步建网-2-DotNetNuke4-4-页面增加/删除/设置(191)
评论排行榜
1. Dot Net设计模式—MVC模式 (0)
2. 用实例解说Dot Net设计模式——装饰模式(0)
3. 创建型模式之间的比较(0)
4. .NET反射、委托技术与设计模式(0)
5. Dot Net设计模式—适配器、桥接与外观三模式之间的关系(0)
需要注意变量作用域的使用
Posted on 2005-12-28 14:36
H_J_H
阅读(134)
评论(0)
编辑
收藏
引用
对于变量的作用域大家可能都很清楚,即变量的作用域包含定义它们的代码块和直接嵌套在其中的代码块。其实也可以应用到其他代码块上,例如分之和循环的代码块上,但是这里有一个需要注意的地方,请看下面这个例子:
1
int
i;
2
for
(i
=
0
;i
<
10
;i
++
)
3
{
4
string
text
=
"
Line
"
+
Convert.ToString(i);
5
Console.WriteLine(
"
{0}
"
,text);
6
}
7
Console.WriteLine(
"
Last text output in loop:{0}
"
,text);
编译会发现,编译通不过,而且报出错误“
名称“text”在类或命名空间“Ch06Ex03.Class1”中不存在
”,这里比较容易理解,因为在for循环外确实没有定义text变量,在退出循环后就被释放掉了,再使用它就是使用了一个未定义的变量所以会报错。我们修改一下,请看下一个例子:
1
int
i;
2
string
text;
3
for
(i
=
0
;i
<
10
;i
++
)
4
{
5
text
=
"
Line
"
+
Convert.ToString(i);
6
Console.WriteLine(
"
{0}
"
,text);
7
}
8
Console.WriteLine(
"
Last text output in loop:{0}
"
,text);
我们在循环块外定义的变量text,这样可以在Console.WriteLine时引用到这个变量,但是编译时还是会报错“
使用了未赋值的局部变量“text”
”,这个错误是提示变量在使用前要被声明并初始化。这样我们就看到了这个例子中的问题,变量text是在for循环块中被初始化的,而赋给text变量的值在退出循环块时就丢失了。在循环体中程序认为text变量有值,而我们确实也为其赋值了,而在退出循环后程序确认为text变量没有被赋值,这是因为变量text是在循环体中被初始化的,这个初始化仅在循环块中起作用,在推出循环后就又变回没有被初始化的状态,所以会报错。我们再进行一次修改:
1
int
i;
2
string
text
=
""
;
3
for
(i
=
0
;i
<
10
;i
++
)
4
{
5
text
=
"
Line
"
+
Convert.ToString(i);
6
Console.WriteLine(
"
{0}
"
,text);
7
}
8
Console.WriteLine(
"
Last text output in loop:{0}
"
,text);
这时,程序会正常编译通过,而且text也是在外部被声明并初始化,而使用时也是在变量相应的作用域中。
对于这种情况的解释,其实涉及在初始化变量text时分配给变量text的内存空间,其实任何变量都是这样的。仅是对于变量的声明,系统并不会分配给它相应的内存空间,系统仅是知道以后将会使用到这个变量。只有在给这个变量进行初始化或赋值时(其实第一次赋值就是对变量的初始化),系统在真正按照声明时变量的类型给变量分配相应的存储空间。就像本例中一样,在循环时对变脸进行了初始化操作,这时在循环执行过程中,这个变量占据了一块系统分配给它的存储空间,但是一旦退出循环,系统就收回了这块存储空间,所以会出现这种错误。
最后,建议大家在使用变量的时候,在声明变量的同时尽可能对其初始化,如果不能同时初始化也一定要在初始化后再使用这个变量。谢谢大家的支持:)如有问题偶会及时改正的,厚厚~~~
努力学习的熊 2005-12-28 14:36
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © H_J_H