位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 其他结构中变量的作用域

提问人:刘团圆发布时间:2020-12-04

    变量的作用域包含定义它们的代码块和直接嵌套 在其中的代码块。这一点也适用于其他代码块,例如分支和循环结构的代码块。考虑下面的代码:

int i;

for (i =0; i < 10; i++)

    string text = $"Line {Convert.ToString (i) }";

    WriteLine($"{text}");

}

WriteLine($"rLast text output in loop: {text}");

    字符串变量text是for循环的局部变量,这段代码不能编译,因为在该循环外部调用的WriteLine()试图使用该字符串变量,但是在循环外部该字符串变量会超出作用域。修改代码,如下所示:

int i;

string text;

for (i = 0; i < 10; i++)

{

    text = $"Line {Convert. ToString(i)}";

    WriteLine($"{text}");

}

WriteLine($"Last text output in loop: {text}");

    这段代码也会失败,原因是必须在使用变量前对其进行声明和初始化,但text只在for循环中进行了初始化。由于没有在循环外进行初始化,因此赋给text的值在循环块退出时就丢失了。但可以进行如下修改:

int i;

string text = " ";

for (i =0; i < 10; i++)

{

    text = $"Line {Convert.ToString(i)}";

    WriteLine($"{text}"};

}

WriteLine($"Last text output in loop: {text}"};

这次text是在循环外部初始化的,所以可以访问它的值。


    在循环中最后赋给text的值可以在循环外部访问。可以看出,这个主题的内容需要花一点时间来掌握。在前面的示例中,循环之前将空字符串赋给text,而在循环之后的代码中,text就不会是空字符串了,其原因可能一下子看不出来。

    这种情况的解释涉及分配给text变量的内存空间,实际上任何变量都是这样。只声明一个简单的变量类型,并不会引起其他变化。只有在给变量赋值后,这个值才会被分配一块内存空间。如果这种分配内存空间的行为在循环中发生,该值实际上被定义为一个局部值,在循环外部会超出其作用域。

    即使变量本身未局部化到循环上,其包含的值却会局部化到该循环上。但在循环外部赋值可以确保该值是主体代码的局部值,在循环内部它仍处于其作用域中。这意味着变量在退出主体代码块之前是没有超出作用域的,所以可在循环外部访问它的值。

    幸好,译器可检测变量作用域的问题,根据它生成的错误信息修正程序有助于我们理解变量的作用域问题。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部