理解课程?

时间:2013-08-05 14:41:38

标签: c# class

为什么这部分代码没有运行并且显示消息“无法通过实例引用访问”并使用类型名称来限定它“?请解释一下我。

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

3 个答案:

答案 0 :(得分:5)

您在实例中使用静态变量。只有1个静态变量。

所以你应该静静地使用它

Report.KwotaZ[Report.IlOperacji] = 213.3;

或将它们定义为实例变量,如此(不含static关键字)

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

答案 1 :(得分: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];
    }
}

答案 2 :(得分:1)

问题在于“报告”类中的“static”关键字。 “static”表示只有1个变量副本。例如,即使您创建了“Report”类的5个实例,它们对于“KwotaZ”也都具有相同的值。

您可能想要删除“static”关键字。这样,“报告”的每个实例都有自己的变量版本。