无效的表达术语“公共”

Posted

技术标签:

【中文标题】无效的表达术语“公共”【英文标题】:Invalid expression term 'public' 【发布时间】:2016-09-02 17:06:35 【问题描述】:

如下代码

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    

    private void button3_Click(object sender, EventArgs e)
    
        public int x = 5;
        MessageBox.Show(x.ToString());
    

我有以下错误

无效的表达式术语“公共”

上线public int x = 5;

为什么我不能在事件处理程序中定义公共对象?

【问题讨论】:

方法中的public关键字有什么用? 为什么是public int x = 5; 我只是测试在事件处理程序中声明公共对象 有时我需要在事件处理程序中声明公共对象,例如“连接” 改为使用x 类字段。 【参考方案1】:

public 是类型(例如public class Foo)和类型成员(例如类上的方法、属性或字段,例如button3_Click)的访问修饰符。

您试图将方法内的局部变量声明为 public,这是不允许的。

修复编译错误的一种方法是从button3_Click 中的局部变量声明中删除访问修饰符:int x = 5; 而不是public int x = 5;。如果您只需要访问 button3_Click 中的变量 x 并且您很高兴每次调用 button3_Click 时都会实例化一个新变量,则应该使用它。

修复编译错误的另一种方法是将x从局部变量更改为字段。通过更改 x 的定义位置,您可以将其声明为 Form1 上的字段,而不是 button3_Click 范围内的局部变量。

试试:

public partial class Form1 : Form

    public int x;

    public Form1()
    
        InitializeComponent();
    

    private void button3_Click(object sender, EventArgs e)
    
        x = 5;
        MessageBox.Show(x.ToString());
    

如果您需要从程序中的其他方法访问x 字段,或者您希望在Form1 实例上多次调用button3_Click 方法时保留值,则此选项更可取。

如果是这种情况,您还可以决定将x 设为property 而不是field,以便更精细地控制x 的读取、写入和/或计算.

【讨论】:

以上是关于无效的表达术语“公共”的主要内容,如果未能解决你的问题,请参考以下文章

无效的表达式术语“>”

框架 2.0 中的表达式术语“>”无效

术语:在 Thompson 的书中,Haskell 中“类型表达式”的精确定义是啥?

是否有用于反向引用的大写/小写版本的正则表达式替换术语? [复制]

正则表达式 - 将 C# 正则表达式转换为 JavaScript 正则表达式的量词的目标无效

巧用正则表达式整理双语术语数据