我在理解变量何时为public
以及可以被其他类访问以及何时不能访问时遇到一些问题。目前,我收到这样的错误消息:未声明run
中的Menu()
变量。我曾尝试在声明的前面加上“ public”,但这给了我很多错误。如何在run
中公开Main
声明?
public static void Main(string[] args)
{
var run = 0;
Menu();
}
static void Menu()
{
run++;
if (run <= 1) {
Welcome();
}
}
尽管有人肯定会问同样的事情,但我一直试图找到解决方案,但没有找到任何解决方案。顺便说一下,Main
和Menu
函数看起来像可以合并,但是为我提供了另一部分有用的解决方法。
答案 0 :(得分:1)
不能像在示例中那样将所有变量public
设为局部变量run
。访问修饰符仅适用于在方法的外部中声明的类变量(即所谓的 fields ):
public class Test
{
public static int run = 0;
public static void Main(string[] args)
{
Menu();
}
static void Menu()
{
run++;
if (run <= 1) {
Welcome();
}
}
}
答案 1 :(得分:1)
超出范围的变量不可访问。这意味着在定义它们的块外(在花括号内)(以使其简单)。因此,只能在以下子块中访问run
:
public static void Main(string[] args)
{
var run = 0;
{
run++;
if (run <= 1) {
Welcome();
}
}
另一种方法是使变量成为类的一部分-然后它成为一个字段,通常是私有的:
public class Program
{
private static int run;
public static void Main(string[] args)
{
run = 0;
Menu();
}
static void Menu()
{
run++;
if (run <= 1) {
Welcome();
}
}
}
我想进行面向对象的编程,可以将其封装在一个类中:
public class Program
{
public static void Main(string[] args)
{
var myClass = new MyClass();
myClass.Run = 0;
myClass.Menu();
}
}
public class MyClass
{
public int Run { get; set; }
public void Menu()
{
Run++;
if (Run <= 1) {
Welcome();
}
}
}
答案 2 :(得分:0)
run
将被声明为您的类的属性:
class YourClass
{
public static int run = 0;
public static void Main(string[] args)
{
Menu();
}
static void Menu()
{
run++;
if (run <= 1) {
Welcome();
}
}
}
答案 3 :(得分:0)
您的问题有很多答案。但是您缺少的是对Variable and Method Scope in Microsoft .NET的理解。
下面是该文章的摘录(对VB.Net参考感到抱歉,但仍然适用)。
变量范围-您可以在程序的四个不同位置声明变量。选择声明变量的位置确定范围。
If
语句之类的块构造中声明变量,则该变量的作用域仅到块末尾为止。生命周期直到过程结束。If
语句之外声明变量,则范围一直到End Sub
或End Function
。变量的生命周期直到过程结束。Class…End Class
或Module…End Module
语句内。范围是此模块内的任何过程。在类中定义的变量的生命周期要到垃圾回收器清除对象为止。在模块中定义的变量的生命周期直到程序结束。Public
语句中声明Module…End Module
变量,该变量的范围将是项目中的任何过程或方法。变量的生命周期将一直持续到程序结束。