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

3 回答 3

5

您正在使用带有实例的静态变量。只有 1 个静态变量。

所以你应该像这样静态使用它

Report.KwotaZ[Report.IlOperacji] = 213.3;

或将它们定义为像这样的实例变量(不带static关键字)

public double[] KwotaZ = new double[10];
public int IlOperacji = 0;
于 2013-08-05T14:44:33.447 回答
2

KwotaZandIlOperacjistatic字段,因此访问它们的语法不是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];
    }
}
于 2013-08-05T14:44:48.710 回答
1

问题在于“报告”类中的“静态”关键字。“静态”意味着只有 1 个变量副本。例如,即使您创建了 5 个“报告”类的实例,它们都将具有相同的“KwotaZ”值。

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

于 2013-08-05T14:45:55.300 回答