C# 从 public 静态 class 调用 public 字段

C# calling public fields from a public static class

我使用VBA多年后才开始学习C#,我不是专业人士,这是我闲暇时做的事情。我正在寻找复制使用 public 变量的逻辑,该变量可以从方法访问并在每次单击按钮 cmdPublicVartest 时递增 1,下面是我到目前为止的代码,但出现错误 非静态字段、方法或publicvar 属性、需要对象引用class,它看起来是因为它是静态 class,但是如果我从静态 class 中删除它,我将不得不在按钮 cmdPublicVartest 上调用 class 的实例。有没有办法让 publicvar 保持静态 class,这样我就不必在按钮上创建 class 的实例?

namespace testDB
{
    public partial class Database : Form
    {
        public string publictest = "public test";
        public int pUblicint = 0;


         public static void   PublicVar()
        {
             
            MessageBox.Show(publictest + pUblicint);
            pUblicint++;

        }
        private void cmdPublicVartest_Click(object sender, EventArgs e)
        {
            testDB.Database.PublicVar();
        }
    }
}

虽然 PublicVar() 是静态的,但它引用的字段(publictestpUblicint)不是。您还必须使它们成为静态的或使 PublicVar() 不是静态的。

只需将您的代码修改为:

namespace testDB
{
    public partial class Database : Form
    {
        public string publictest = "public test";
        public int pUblicint = 0;


        public void PublicVar()
        {
         
            MessageBox.Show(publictest + pUblicint);
            pUblicint++;

        }
        private void cmdPublicVartest_Click(object sender, EventArgs e)
        {
            PublicVar();
        }
    }
}

您不能从静态方法访问非静态字段,因为它们属于 class 的一个实例,并且在调用静态方法时您没有实例。

您可以像这样将字段设为静态

public partial class Database : Form
    {
        public static string publictest = "public test";
        public static int pUblicint = 0;


        public static void PublicVar()
        {

            MessageBox.Show(publictest + pUblicint);
            pUblicint++;

        }
        private void cmdPublicVartest_Click(object sender, EventArgs e)
        {
            testDB.Database.PublicVar();
        }
    }

或者像这样使方法成为非静态方法

public partial class Database : Form
    {
        public string publictest = "public test";
        public int pUblicint = 0;


        public void PublicVar()
        {

            MessageBox.Show(publictest + pUblicint);
            pUblicint++;

        }
        private void cmdPublicVartest_Click(object sender, EventArgs e)
        {
            PublicVar();
        }
    }