2013-08-05 48 views
0

爲什麼這個零件代碼不運行,並顯示消息「不能使用實例引用訪問使用類型名稱來限定它」?請解釋我。瞭解課程?

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

報告是一個靜態類,而button1_Click是非靜態方法 – zsong

+5

因爲'KwotaZ'是靜態的。如果這些數組應該存在於每個新對象中,則它們不應該是靜態的。 – Joe

+0

你已經通過實例名稱引用了靜態字段(例如)'IlOperacji'。 –

回答

5

你正在使用一個實例的靜態變量。只有1個靜態變量。

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

Report.KwotaZ[Report.IlOperacji] = 213.3; 

或將它們定義爲實例變量像這樣(不static關鍵字)

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

好的,我將它們定義爲沒有static關鍵字的實例變量,但出現了新問題。 第二部分類(Form4)有其他問題,當我想分配form1.report2.KwotaZ [0] .ToString(); – Gugunion

+0

Second class: public partial class Form4:Form { private Form1 form1; public Form4(Form1 form1) { InitializeComponent(); this.form1 = form1; } 私人無效Form4_Load(對象發件人,EventArgs的) { 對(INT I = 0;我 Gugunion

+0

@Gugunion如果你有另一個問題,你應該提出另一個問題。 –

2

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

的問題是在你的「報告」類中的「靜態」的關鍵字。 「靜態」意味着只有一個變量副本。例如,即使您創建了5個「Report」類實例,它們也將具有相同的「KwotaZ」值。

你可能想要的是刪除「靜態」關鍵字。這樣,「Report」的每個實例都將擁有自己的變量版本。