1

我在上面的Form1 类中定义了一个用户名:Form

而 user_name 在上面定义为,

string user_name = "Rammy";

我想在下面的行中使用这个用户,但它没有执行,并给出错误“ A field initializer cannot reference the non-static field, method, or property ”。

string copyright_bottom_text = user_name;

有人可以帮忙吗?我正在使用视觉工作室 2012。

4

2 回答 2

4

将行下移到构造函数或方法

string copyright_bottom_text = user_name;

编译器错误 CS0236

实例字段不能用于初始化方法之外的其他实例字段。如果您尝试在方法外部初始化变量,请考虑在类构造函数内部执行初始化。有关详细信息,请参阅方法(C# 编程指南)。

public class MyClass
{
   public int i = 5;
   public int j = i;  // CS0236
   public int k;      // initialize in constructor

   MyClass()
   {
      k = i;
   }

   public static void Main()
   {
   }
}
于 2013-09-15T14:24:28.120 回答
0

您可能尝试从静态方法访问 user_name 变量。有静态和实例变量/方法。静态的属于类本身,不属于从该类创建的实例。所有实例都通过类访问数据,但是如果您更改它,它将为所有实例更改 - 当然因为它属于类。这是它的样子: class Something { private static string StaticString = "我属于这个类"; ... //constructor ... } 然后,当您创建此类的实例时: Something s = new Something(); 你不能说 string x = s.StaticString; 因为它属于“Something”类,而不是实例“s”。但是你可以说 string x = Something.StaticString;

在您的示例中,您尝试从静态方法访问实例变量。这与上述相反:user_name 在每个实例中都是唯一的(例如,您可以有一个名为 Joe 的实例,一个名为 Robert 的实例等)。但是您尝试在班级级别上使用它。该类对基于它创建的实例一无所知。这就像当你给你的狗一个名字时,所有的狗都应该被称为相同的。它不工作。

尝试使用静态字符串作为用户名,这样它会编译,但它不会是正确的。相反,将变量保留为实例变量(非静态),并在实例方法中使用它(非静态)。请记住,您可以在实例方法中使用静态方法和变量,但不能在静态方法中使用实例变量或方法。

我希望这有帮助。:)

于 2013-09-15T14:34:01.903 回答