С#. Вызов метода из метода в одном классе

123
01 апреля 2021, 05:50

Ну очень глупый вопрос наверное :(

Распихал логику по методам, мне удобнее когда каждая функция свое выполняет.

И приходится постоянно делать так

myclass.doing1(new myclass().doing2(new myclass().doing3()))

this так не работает, без создания экземпляра класса они тоже не работают. Как в шарпе это делают?

Почерпнул новой инфы, большое спасибо!

Answer 1

Если вам надо, чтобы функции работали без создания экземпляра, сделайте их статическими. Пример:

public static class Mathf {
    public static float Sqrt (float x) {...}
    public static float Sin  (float x) {...}
    public static float Cos  (float x) {...}
}

И вызывайте через точку после имени класса: x = Mathf.Sqrt (Mathf.Cos (x));

А если используете using static в начале файла, то и имя класса будет необязательным.

Теперь немного поясню про экземпляры и this. ООП придумали, грубо говоря, чтобы упростить работу с наборами данных при помощи наборов функций, объединили данные и функции в одно целое и назвали класс.

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

Внутри нестатических методов вы можете использовать слово this. Это ссылка на экземпляр, у которого вызвали метод. Если вы пишете myClass.f1() то метод f1 может обращаться к нестатическим полям и методам экземпляра myClass: this.f2() или просто f2().

Статические методы вызываются без экземпляра, поэтому там вы не сможете использовать this, хоть явно, хоть неявно.

Answer 2
MyClass myclass = new MyClass();
myclass.doing1( myclass.doing2( myclass.doing3() ) );

или

public class MyClass
{
  ...
  public void DoIt() {
    doing1( doing2( doing3() ) );
  }
}
MyClass myclass = new MyClass();
myclass.DoIt();
READ ALSO
Количество элементов на странице в зависимости от введенного числа

Количество элементов на странице в зависимости от введенного числа

Подскажите, пожалуйста, как в ASPNET CORE MVC сделать так, чтобы по вводу нужного числа в текстовом поле во view, появлялось количество элементов (текстовых...

93
Как сообщать об изменениях расчетного привязанного свойства класса в WPF?

Как сообщать об изменениях расчетного привязанного свойства класса в WPF?

Подскажите, пожалуйста, где я не правЯ создал класс Bill, в котором есть ряд полей

106
Как отправить картинку через телеграм бота не загружая ее на сервер?

Как отправить картинку через телеграм бота не загружая ее на сервер?

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

115
Сортировка перед GROUP_CONCAT и DISTINCT?

Сортировка перед GROUP_CONCAT и DISTINCT?

Не могу придумать как перед GROUP_CONCAT и DISTINCT отсортировать по ordering

129