C# 静态方法无法访问非静态成员的错误及解决方案
错误:需要对象引用
以下代码片段演示了这个问题:
<code class="language-csharp">namespace WindowsApplication1 { public partial class Form1 : Form { ... private static void SumData(object state) { ... setTextboxText(result); // 错误:非静态字段、方法或属性 } } }</code>
问题原因
错误信息表明,静态方法 SumData
试图调用非静态成员 setTextboxText
。静态方法只能访问静态成员,而访问非静态成员需要一个指向所属类的对象的引用。
解决方案
有多种方法可以解决此错误:
setTextboxText
方法设为静态:<code class="language-csharp">public static void setTextboxText(int result)</code>
然而,如果 setTextboxText
方法需要访问实例变量,则无法将其设为静态。
Form1
的静态单例调用 setTextboxText
:<code class="language-csharp">class Form1 { public static Form1 Instance; // 单例 ... private static void SumData(object state) { ... Instance.setTextboxText(result); } }</code>
在 Form1
的构造函数中,需要将 Instance
设置为当前实例:Instance = this;
。
Form1
实例:<code class="language-csharp">private static void SumData(object state) { ... Form1 frm1 = new Form1(); frm1.setTextboxText(result); }</code>
如果 Form1
的实例已经存在,此方法可能不适用。
SumData
设为非静态实例方法 (属于 Form1
):<code class="language-csharp">private void SumData(object state) { ... setTextboxText(result); }</code>
这通常是最佳的解决方案,因为它保持了代码的封装性和可维护性。
更多信息,请参考 MSDN 文档。
以上是为什么静态方法无法在C#中访问非静态成员?的详细内容。更多信息请关注PHP中文网其他相关文章!