如何正确创建实例以使用方法?

时间:2018-10-10 08:36:31

标签: c# winforms

我目前正在全班学习。这可能是一个新手问题,但是考虑到我一直在谷歌搜索并且陷入一个圆圈,我想我需要一个指针。

问题是我试图创建一个实例,以便我可以通过在Winforms中单击按钮来使用Info和Liste的方法。但是,它告诉我

  

没有给出与所需参数相对应的参数   属于form1。

考虑到它的构造函数和所有元素,这是有道理的。

作为潜在的解决方法,它告诉我在Methods类中使用以下代码:

public Methods()
{
}

我采用哪个构造函数,但是我对使用它有0想法。感谢您的帮助。

public partial class Main : Form
{
    Methods Methods = new Methods(); // not working

    public Main()
    {
        InitializeComponent();
        Methods Methods = new Methods(this);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Methods.Info();  // not working
        Methods.Liste(); // not working
    }       
}

public class Methods
{
    int count = 0;
    private Main mainForm;

    public Methods(Main form1)
    {
        mainForm = form1;
    }

    public void Info()
    {
        Inventory.array[count] = Convert.ToInt32(mainForm.textBox2.Text) * Convert.ToInt32(mainForm.textBox3.Text);
        count++;
    }

    public void Liste()
    {
        int sum = 0;
        foreach (int i in Inventory.array)
        {
            sum += i;
        }
        mainForm.label5.Text = Convert.ToString(sum);
    }
}

2 个答案:

答案 0 :(得分:1)

Methods Methods = new Methods(this);

正在创建一个局部变量,该局部变量遮蔽了类中的字段。使用

this.Methods = new Methods(this);

相反。而且,您不应在字段或本地人中使用大写字母。

答案 1 :(得分:1)

您有很多错误。让我们逐步关注它们:

  1. 您有一个类型为Methods的字段,该字段引用您的Methods类的单个实例(通过的名称来表示课程)。为了创建该实例,您需要引用现有表单。但是,this关键字在成员外部不存在。这就是编译器在您的字段声明中提出的要求。

  2. 您的构造函数中有一个 local 变量,名为Methods,该变量隐藏该字段。因此,实际上您有该类的两个实例,一个在字段中,一个在cosntructor中定义。只需省略后者:

    readonly Methods Methods;
    
    public Main()
    {
        InitializeComponent();
        this.Methods = new Methods(this);
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        Methods.Info();  // not working
        Methods.Liste(); // not working
    }
    

    放在一边:您可以在构造函数中省略this关键字:

    Methods = new Methods(this)
    

    代替

    this.Methods = new Methods(this)
    

    因为您所指代的符号很清楚。我只是添加了它以使其更加清晰。

  3. 最重要的是:Methods对于一个类来说确实是个坏名字。而是选择一个名称来描述您的班级应该做什么。最好您看看naming-conventions