簡體   English   中英

了解課程?

[英]Understanding classes?

為什么此零件代碼沒有運行並顯示消息“無法通過實例引用訪問,請改為使用類型名稱來限定它”? 請給我解釋一下。

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {         
       public Form1()
        {
        }

       public class Report //my public class
        {
            public static double[] KwotaZ = new double[10];
            public static double[] KwotaNa = new double[10];
            public static string[] WalutaNa = new string[10];
            public static string[] WalutaZ = new string[10];
            public static int IlOperacji = 0;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Report raport2 = new Report(); //create new object class Report
            raport2.KwotaZ[raport2.IlOperacji] = 213.3; //this wrong part code why???
            Konwerter();
        }
    }
}

您正在將靜態變量與實例一起使用。 只有1個靜態變量。

所以您應該像這樣靜態地使用它

Report.KwotaZ[Report.IlOperacji] = 213.3;

或將它們定義為實例變量,例如so(不帶static關鍵字)

public double[] KwotaZ = new double[10];
public int IlOperacji = 0;

KwotaZIlOperacjistatic字段,因此訪問它們的語法不是instance.fieldName ,而是TypeName.fieldName ,如

Report.KwotaZ[Report.IlOperacji] = 213.3;

這將允許程序進行編譯,但是可能不是您想要的。 您更有可能將static字段設置為實例屬性:

public class Report //my public class
{
    // Only showing two properties here; do the rest in the same manner
    public double[] KwotaZ { get; set; }
    public double[] KwotaNa = { get; set; }

    public Report()
    {
        this.KwotaZ = new double[10];
        this.KwotaNa = new double[10];
    }
}

問題出在“報告”類中的“靜態”關鍵字上。 “靜態”表示變量只有1個副本。 例如,即使您創建“ Report”類的5個實例,它們的“ KwotaZ”值都相同。

您可能想要刪除“ static”關鍵字。 這樣,“報表”的每個實例將具有其自己的變量版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM