C#中变量的作用域变量和公共变量有什么区别你可以在程序中的四个不同位置声明变量变量的“作用域”是什么意思?将变量的范围视为“特定变量的范围是程序源代码中编译器识别该变量的范围”。
4 回答
如果我对您的问题的阅读是正确的,那么您希望将范围(本地、实例、静态等)与可见性(公共、私有、受保护、内部)进行对比。这两个概念几乎是独立的(我说“几乎”,因为局部范围的变量没有可见性)。它们一起使您可以控制变量的生命周期和可访问性。
范围控制变量的生命周期,让您确定它何时存在以及何时变得不可用。自然,范围限制了“程序源代码中该变量被编译器识别的范围”。但是,被编译器识别并不足以让您的程序访问该变量:如果编译器将该变量识别为私有,它不会让您的程序在变量可见的上下文之外访问它(例如,从另一个班级)。
从本质上讲,范围和可见性控制可访问性的两个不同方面,它们共同决定程序源代码中的范围,在该范围内,试图访问它的代码可以使用该变量。
变量的范围是您可以使用该名称并谈论同一件事的时间。
如果它在函数中,则查看{ }
s. 每当您进入 a{ }
时,您就会进入更深的范围 - 在内部声明的变量{ }
不能从外部引用,但在外部声明的变量可以从内部引用。事实上,您不需要 if、for 等 - 您可以{ }
在 C# 中随时声明一个 new,例如,您可以执行以下操作:
{
int a = foo();
int b = bar();
}
{
int a = foo();
int b = bar();
}
并且重新声明是有效的。
类的“范围”实际上是完全不同的东西,称为可见性。public
表示如果您在此文件或using
此文件中,您可以引用它。protected
意味着只有当您是该类(或其子类)的实例时才能访问它。private
意味着只有当您是该类的实例(而不是其子类)时才能访问它。internal
就像 public 一样,除了你还必须在同一个程序集中 - 所以如果你编译为 .dll,那么你不能从其他地方引用内部变量。但是,它是否是公共/私有/内部/受保护的并不能控制变量的生存时间——它的范围。