需要对象引用?

Dan*_*atz 2 c# visual-studio

我正在学习C#并编写了一些简单的代码,但我不明白为什么我必须在Main方法的范围内声明变量userChoice和numberR,而不是在类的范围内.如果我在类中声明它,我会得到构建错误

using System;

namespace FirstProgram
{
class Program
{
   string userChoice;
   int numbeR;

 static void Main()
    {
        Console.WriteLine("Write a number...");
        userChoice = Console.ReadLine();

        numbeR = Convert.ToInt32(userChoice);
        Console.WriteLine("You wrote {0}", numbeR);
        Console.ReadLine();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

但只有这样才能给我带来错误:

using System;

namespace FirstProgram
{
class Program
{    
 static void Main()
    {
        string userChoice;
        int numbeR; 

        Console.WriteLine("Write a number...");
        userChoice = Console.ReadLine();

        numbeR = Convert.ToInt32(userChoice);
        Console.WriteLine("You wrote {0}", numbeR);
        Console.ReadLine();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我不应该在Main中使用这两个变量,只需在上面的类中声明它们吗?我很困惑...感谢任何建议.

Chr*_*ens 5

你不能这样做,因为它Main()是一个静态函数.您的变量被声明为实例变量,只能在Program类的实例上访问.如果声明userChoicenumbeR作为静态变量,它将编译.

static string userChoice;
static int numbeR;

static void Main()
{
    //your code
}
Run Code Online (Sandbox Code Playgroud)

静态成员意味着您可以在不实例化类的情况下使用该成员.想像:

public class MyClass
{
     public static int StaticInt;
     public int NonStaticInt;
}
Run Code Online (Sandbox Code Playgroud)

意味着你可以这样做:

MyClass.StaticInt = 12;  // legal
MyClass.NonStaticInt = 12; // error, can't staticly access instance member
Run Code Online (Sandbox Code Playgroud)

并且所有类都可以访问该更改,因为MyClass.StaticInt程序中只有一个.要进行更改NonStaticInt,您必须创建该类的实例,如下所示:

MyClass mine = new MyClass();
mine.NonStaticInt = 12;  // legal
mine.StaticInt = 12; // Error, cannot access static member on instance class.
Run Code Online (Sandbox Code Playgroud)