Для нестатического поля, метода или свойства требуется ссылка на объект c# (Windows.Froms)

В классе Polynom у меня есть такие поля и конструкторы:

        private string[] coff1, coff2;
        private int deg1, deg2;

        public Polynom(string[] coff1, string[] coff2)
        {
            this.coff1 = coff1;
            this.coff2 = coff2;
        }

        public Polynom(int deg1, int deg2)
        {
            this.deg1 = deg1;
            this.deg2 = deg2;
        }

coff1 и coff2 - строчные массивы, которые хранят коэффициенты многочленов. deg1 и deg2 - степени многочленов. Также в этом классе есть метод, который складывает многочлены и возвращает строку

public  string Sum(string [] coff1,string [] coff2,int deg1,int deg2){...}

Как мне уже в классе Form1 по нажатию клавиши на определенный элемент добавить в textBox строку ответа? В классе Form1 я объявляю такие же поля и пишу следующий метод:

string[] coff1, coff2;
int deg1, deg2;

 private void sum_Click(object sender, EventArgs e)
{
   coff1 = firstM.Text.Split(',');
   coff2 = secondM.Text.Split(',');
   deg1 = Convert.ToInt32(firstD.Text);
   deg2 = Convert.ToInt32(secondD.Text);
   answer.Text=Polynom.Sum(coff1, coff2, deg1, deg2);
}

Компилятор показывает ошибку в строке с answer "требуется ссылка на объект"
Укажите пожалуйста на ошибки с точки зрения ООП, правильно ли я написал поля и конструкторы?


Ответы (1 шт):

Автор решения: aepot

Не жалейте букв, вставляйте код класса целиком. Чтобы не пришлось угадывать код.

Укажите пожалуйста на ошибки с точки зрения ООП, правильно ли я написал поля и конструкторы?

Очень мало контекста, чтобы ответить точно парвильно, но очевидно, если для суммы нужны все 4 аргумента, то и конструктор должен принимать их все. А то у вас получается 2 конструктора, которые принмают данные только частично и ни одним из них вы не воспользовались.

Чтобы вызвать конструктор класса и получить его экземпляр, нужно использовать ключевое слово new.

Попробую достроить.

public class Polynom
{
    private string[] coff1, coff2;
    private int deg1, deg2;

    public Polynom(string[] coff1, string[] coff2, int deg1, int deg2)
    {
        this.coff1 = coff1;
        this.coff2 = coff2;
        this.deg1 = deg1;
        this.deg2 = deg2;
    }

    public string Sum()
    {
        string result = ...;
        //...
        return result;
    }
}

Никакой статики здесь не должно быть.

private void sum_Click(object sender, EventArgs e)
{
    string[] coff1 = firstM.Text.Split(',');
    string[] coff2 = secondM.Text.Split(',');
    int deg1 = Convert.ToInt32(firstD.Text);
    int deg2 = Convert.ToInt32(secondD.Text);
    Polynom polynom = new Polynom(coff1, coff2, deg1, deg2);
    answer.Text = polynom.Sum();
}
→ Ссылка