C# 从公共静态类调用公共字段

时间:2021-01-26 08:55:00

标签: c# .net static instance

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

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();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

if ($result->num_rows > 0)
while($guest = $result->fetch_assoc()) {
{?>
    <div class="posts-container">
        <div class="post-header">
            <div class="user-details">
                <div class="user-name"><?php echo $guest["firstName"] ?></div>
                <div class="user-email"></div>
            </div>
            <div class="time"></div>
        </div>
        <div class="post-message">
            <h3></h3>
            <p></p>
        </div>
    </div>
<?php } ?>

或者像这样使方法非静态

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();
        }
    }

答案 1 :(得分:0)

只需将您的代码修改为:

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();
        }
    }
}

答案 2 :(得分:-1)

虽然 PublicVar() 是静态的,但它引用的字段 (publictest, pUblicint) 不是。您也必须将它们设为静态或将 PublicVar() 设为非静态。