none
C# Классы в разных файлах(видимость, как обратится?) RRS feed

  • Вопрос

  • Я знаю вопрос ламерский, ответе пожалуйста на уровне ламера(не в обиду, к словам не придираться)

    Я создал класс в новом файле(не статический и с не статическими методами)

    выдает ошибку: CS0120 Для не статического поля, метода или свойства требуется ссылка на объект

    Перерыл весь интернет, ничего не нашел

    1 файл Form1.cs:
    namespace Klassivfailah
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    Class1 myclass = new Class1();
    myclass.metod2(3);
    }
    
    public void metod1(int f)
    {
    f += 1;
    MessageBox.Show("f");
    }
    }
    }
    Class1.cs второй файл:
    namespace Klassivfailah
    {
    public class Class1
    {
    public Class1()
    {
    Form1.metod1(3);
    }
    
    public void metod2(int q)
    {
    q += 1;
    MessageBox.Show("q");
    }
    }
    }
    Ошибка	CS0120	Для нестатического поля, метода или свойства "Form1.metod1(int)" требуется ссылка на объект.	Klassivfailah	C:\Users\Animelubitel\documents\visual studio 2015\Projects\Klassivfailah\Klassivfailah\Class1.cs	14	Активно

    Знаю можно сделать методы или поля статическими, можно еще объявить класс как partial, но мне надо именно не статические(обычные классы и методы в разных файлах)

    Есть решение: передать и хранить в классе  ссылку на объект, как это прописать в файле?И как получить ссылку на форму?

    Примера нет(не ругайтесь на это) я просто спрашиваю, приведите подробный пример(код) пожалуйста

    Очень жду ответов


    27 февраля 2018 г. 11:52

Ответы

  • public partial class Form1 : Form
    {
        ...
        public Form1()
        {
            Class1 myclass = new Class1(this);
            ...
        }
        ...
    }
    
    public class Class1
    {
        Form1 _form;
        ...
        public Class1(Form1 f)
        {
            _form = f;
            ...
            _form.method1(3);
            ...
        }
        ...
    }
    

    Как-то так.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    28 февраля 2018 г. 8:13

Все ответы

  • я имею в виду ссылку на form1(без создания нового экземпляра), именно ссылку
    вот, если интересно сам сделал:
    1 файл Form1.cs:
    namespace Klassivfailah
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    Class1 myclass = new Class1();
    myclass.formadlyaclassa1 = this;
    myclass.metod2();
    }

    public void metod1(int f)
    {
    f += 1;
    MessageBox.Show(f.ToString());
    }
    }
    }
    Class1.cs второй файл:
    namespace Klassivfailah
    {
    public class Class1
    {
    public Form1 formadlyaclassa1;
    public Class1()
    {
    }
    public void metod2()
    {
    formadlyaclassa1.metod1(3);
    }
    }
    }
    вывод MessageBox.Show: 4
    27 февраля 2018 г. 21:24
  • public partial class Form1 : Form
    {
        ...
        public Form1()
        {
            Class1 myclass = new Class1(this);
            ...
        }
        ...
    }
    
    public class Class1
    {
        Form1 _form;
        ...
        public Class1(Form1 f)
        {
            _form = f;
            ...
            _form.method1(3);
            ...
        }
        ...
    }
    

    Как-то так.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    28 февраля 2018 г. 8:13