公开变量时出现问题

时间:2018-11-03 12:02:00

标签: c# variables public

我在理解变量何时为public以及可以被其他类访问以及何时不能访问时遇到一些问题。目前,我收到这样的错误消息:未声明run中的Menu()变量。我曾尝试在声明的前面加上“ public”,但这给了我很多错误。如何在run中公开Main声明?

public static void Main(string[] args)
{
    var run = 0;
    Menu();
}

static void Menu()
{
    run++;

    if (run <= 1) {
        Welcome();
    }
}

尽管有人肯定会问同样的事情,但我一直试图找到解决方案,但没有找到任何解决方案。顺便说一下,MainMenu函数看起来像可以合并,但是为我提供了另一部分有用的解决方法。

4 个答案:

答案 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 SubEnd Function。变量的生命周期直到过程结束。

  • 模块/类-您可以在任何过程之外声明变量,但该变量必须在Class…End ClassModule…End Module语句内。范围是此模块内的任何过程。在类中定义的变量的生命周期要到垃圾回收器清除对象为止。在模块中定义的变量的生命周期直到程序结束。

  • 项目-您可以在Public语句中声明Module…End Module变量,该变量的范围将是项目中的任何过程或方法。变量的生命周期将一直持续到程序结束。