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, но мне надо именно не статические(обычные классы и методы в разных файлах)

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

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

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


    • Перемещено Vector BCO 27 февраля 2018 г. 12:10 перенесено из Разное (technet)
    • Изменено Аниме Любитель 27 февраля 2018 г. 13:04
    27 февраля 2018 г. 11:53

Все ответы

  • Посмотрите пример, в котором описаны возможные сценарии возникновения вашей ошибки. Довольно подробно описаны примеры кода.

    https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/compiler-messages/cs0120

    Update: вы не создаете объект. Попробуйте следующее:

    Form1 form = new Form1();

    form.metod1(3);

    • Изменено Bespridelschic 27 февраля 2018 г. 13:13 приведен исходный код
    • Предложено в качестве ответа VadimTagil 14 ноября 2018 г. 10:30
    27 февраля 2018 г. 12:54
  • Посмотрите пример, в котором описаны возможные сценарии возникновения вашей ошибки. Довольно подробно описаны примеры кода.

    https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/compiler-messages/cs0120

    Update: вы не создаете объект. Попробуйте следующее:

    Form1 form = new Form1();

    form.metod1(3);

    А через new это вроде новый экземпляр, а мне надо именно к этой форме или я чето недопанимаю?
    27 февраля 2018 г. 13:18
  • В любом случае, вам необходимо создавать экземпляр объекта. В противном случае, вы не сможете обратиться к методу. Как вариант, можете всё же объявить метод method1 как статический. В противном случае, вам может потребоваться введение слушателя события в класс.
    27 февраля 2018 г. 13:55
  • В любом случае, вам необходимо создавать экземпляр объекта. В противном случае, вы не сможете обратиться к методу. Как вариант, можете всё же объявить метод method1 как статический. В противном случае, вам может потребоваться введение слушателя события в класс.
    а нельзя получить ссылку на form1, экземпляр уже создан, смотрите код выше
    27 февраля 2018 г. 14:09
  • Уже  существующие формы можно получить через свойство Application.OpenForms
    • Изменено VadimTagil 27 февраля 2018 г. 16:18
    27 февраля 2018 г. 16:18
  • я имею в виду ссылку на 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
  • В любом случае, вам необходимо создавать экземпляр объекта. В противном случае, вы не сможете обратиться к методу. Как вариант, можете всё же объявить метод method1 как статический. В противном случае, вам может потребоваться введение слушателя события в класс.

    слушателя события

    Это что?

    1 марта 2018 г. 11:21