创建变量时出现问题 public

Problems when making a variable public

我在理解变量何时为 public 并且可以被其他 类 访问以及何时不能访问时遇到了一些问题。现在,我收到 Menu() 中的 run 变量未声明的错误。我试过在声明前面放一个 "public" ,但这给了我很多错误。如何在 Main public 中进行 run 声明?

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

static void Menu()
{
    run++;

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

我试图找到解决方案,但没有找到任何解决方案,尽管肯定有人问过同样的问题。顺便说一句,MainMenu 函数看起来可以合并,但为代码的另一部分提供了一个有用的解决方法。

您不能将所有变量设为 public,例如示例中的局部变量 run。访问修饰符仅适用于在方法外部声明的class变量(所谓的字段):

public class Test 
{
    public static int run = 0;

    public static void Main(string[] args)
    {

        Menu();
    }

    static void Menu()
    {
        run++;

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

run 将被声明为您的 class:

的 属性
class YourClass
{
    public static int run = 0;

    public static void Main(string[] args)
    {
        Menu();
    }

    static void Menu()
    {
        run++;
        if (run <= 1) {
            Welcome();
        }
     }
 }

超出其范围的变量不可访问。这意味着在定义它们的块外(大括号内)(为简单起见)。所以你只能在这样的子块中访问 run

public static void Main(string[] args)
{
    var run = 0;
    {
        run++;
        if (run <= 1) {
            Welcome();
    }
}

另一种方法是使 class 的变量部分成为一个字段,通常是私有的:

public class Program 
{
    private static int run;
    public static void Main(string[] args)
    {
        run = 0;
        Menu();
    }

    static void Menu()
    {
        run++;

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

我想做面向对象的编程,你可以把它封装在一个class中:

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();
        }
    }
}

您的问题有很多答案。但是你缺少的是对Variable and Method Scope in Microsoft .NET.

的理解

以下是该文章的节选(对 VB.Net 参考表示抱歉,但它仍然适用)。

变量范围 - 您可以在程序中的四个不同位置声明变量。您选择声明变量的位置决定了范围。

  • - 如果您在块结构中声明一个变量,例如 If 语句,该变量的作用域仅到块结束为止。生命周期是直到程序结束。

  • Procedure - 如果您在过程中声明一个变量,但在任何 If 语句之外,范围是直到 End SubEnd Function。变量的生命周期是直到过程结束。

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

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