C# VS2010 - 为什么我会收到消息“非静态字段需要对象引用”
本文关键字:字段 静态 对象引用 消息 为什么 VS2010 | 更新日期: 2023-09-27 18:34:48
我将这个问题归结为一个非常简单的程序:
public Form1()
{
InitializeComponent();
TextBox tb1;
tb1 = textBox1; // this line is OK
tb1 = this.textBox1; // this line is OK
tb1 = Form1.textBox1; // this line generates error message
}
如果将鼠标悬停在"textBox1"、"this.textBox1"和"Form1.textBox1"上,则在所有情况下,工具提示都会显示"TextBox Form1.textBox1"。
(有关显示工具提示的屏幕转储,请参阅 www.firish.com/tb1.jpg 和 www.firish.com/tb2.jpg(
我在办公室里传递了一下,但这里没有人能真正解释为什么第三个示例无法编译,但除了"嗯","嗯......"之外没有太多其他内容。耸了耸肩。
因为 Form1
是类的名称,而不是 Form1 的实例。
创建类时,代码如下所示
Form1 f = new Form1();
这里f
是类 Form1 的实例,您可以使用(前提是文本框 1 可见(
TextBox tb1 = f.TextBox1;
在类 Form1 中,您可以使用关键字 this
引用当前实例
因为使用此语法,您只能访问static
成员。 textBox1
是一个动态成员,只能从初始化的对象访问。 myObject.textBox1
.你正在尝试做MyClass.textBox1
.
textBox1 是一个实例变量。 它必须存在于对象的实例化副本中。 当你说这样的话时,就会发生这种情况:
Form1 form new Form1();
form.textBox1 = "Something";
如果不实例化对象,则它正在使用静态调用,并且不能静态调用作为实例变量的对象。
Form1.textBox1 = "Something"; // this fails.
在您的情况下,您使用的是构造函数。 构造函数仅在对象实例化时被调用,因此使用 this(或隐含的 this(有效,但使用静态调用则不然,因为没有实例可以分配变量。