Что лучше? Статические методы ИЛИ Методы экземпляра

Всякий раз, когда вы застряли со сложными функциями, просто помните, что он всегда был построен из (нескольких) простых функций. Нам трудно комментировать, поскольку нет примера файла / данных, которые могли бы помочь уточнить, что означало каждое условие.

Однако .. Вы можете начать с отступа (разрыва) формулы из 1 строки ..:

=IF(EnvAReinstall="Yes";

    IF(ROW()>2;

        IF(
            AND(

                OR( LEFT($M1;3)<>"<GI"
                    ; AND (LEFT($M1;3)="<GI"
                            ;$C1<>EnvATP1
                            ;$C1<>EnvATP2
                            ;$C1<>EnvATP3
                          )    

                   )

                ;RIGHT($D1)="Y"
                ;$E1="PPCL"&EnvA
                ;$AA1="No"

                )

        ;"Yes";"No")

    ;"SDLC: To Reinstall in "&EnvA)

;"N/A")

ДОПОЛНИТЕЛЬНО: из комментария.

=SI(EnvA<>"";
    SI(LIGNE()>2;
        SI(ESTNA(RECHERCHEV($A1;EnvARF80;2;FAUX));
            SI(
                OU(
                    ET($D1>=GAUCHE(EnvAMatA;3);$D1<=EnvAMatA);
                    ET($D1>=GAUCHE(EnvAMatB;3);$D1<=EnvAMatB)
                )
            ;"Matrix";"No")
        ;RECHERCHEV($A1;EnvARF80;2;FAUX))
    ;CONCATENER("Installed in ";EnvA;" in/on"))
;"N/A")

Вам просто нужно начать логическую трассировку с самого внутреннего IF (), и вы всегда можете обратиться к справке Excel за подробностями and () или (), right (), left () & amp; Функция row ().

Надеюсь, это поможет (в создании вашего дерева выбора). (:

6
задан Anton Sizikov 27 June 2015 в 14:03
поделиться

6 ответов

В идеальном мире объектно-ориентированного программирования, вероятно, не было бы необходимости в статических методах (я думаю, что у Эйфеля их тоже нет). Но, в конце концов, важно не объектно-ориентированная чистота вашего кода (в C # достаточно концепций, которые не являются строго объектно-ориентированными объектами, например методы расширения), а то, что вы делаете.

могут использовать статические методы для общих вспомогательных методов (которым не нужен общий вспомогательный класс или состояние сами по себе) или такие вещи, как Color.FromARGB (), которые ведут себя немного как конструктор для типов значений.

В общем, любой метод который не затрагивает состояние объекта (и, следовательно, больше зависит от класса, чем от объекта), можно сделать статическим. Разницы в производительности возникать не должно. В любом случае, не очень измеримо. Ян Грей

6
ответ дан 8 December 2019 в 12:22
поделиться

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

Как утверждали другие, вы можете сделать любой метод статическим, если он не обращается к состоянию, и вы получите небольшое улучшение производительности.

Если вы действительно хотите иметь возможность вызывать метод в конкретном экземпляре и получать преимущества полиморфизма (т. е. производный класс может переопределять поведение метода), тогда вы должны сделать его методом экземпляра.

Если ваши классы реализуют интерфейсы, то методы, принадлежащие этим интерфейсам, также должны быть объявлены как методы экземпляра.

4
ответ дан 8 December 2019 в 12:22
поделиться

If your method uses non-static data members, don't make it static (you "can't").

If your method does not use any non-static data members, you can make it static, but that mostly depends on your design rather than on whether it uses or not uses non-static members (there's not much difference in performance anyway as Mehrdad said).

If you have NO non-static data members in your class, sometimes it's a best practice to make all the methods static (like in the case of grouping helper functions under one class for the sake of good order).

2
ответ дан 8 December 2019 в 12:22
поделиться

Методы экземпляра тесно связаны с экземпляром. Таким образом, вы могли видеть одно преимущество статических методов в том, что они не привязаны к экземпляру. Статические методы могут (если они видны) использоваться другими объектами для решения своих проблем. Иногда это хорошо и нужно. Затем вам нужно подумать о том, чтобы ваши статические методы были в одном классе, или если вы начнете создавать служебные классы для более широкого использования. Я бы не увидел использования статических методов быть «менее объектно-ориентированным». Статические методы - это один из способов обойти недостатки объектно-ориентированного программирования (особенно в языках с единичным наследованием). Вы можете назвать это более функциональным подходом (я знаю, что на самом деле это не так).

Все это - просто набор вопросов, которые вы должны задать своему коду, и которые должны определить, лучше ли это метод экземпляра, статический метод того же класса или статический метод другого класса.

Я бы даже не думал о проблемах с производительностью. Это ослабит ваш дизайн, и разница не такая уж и большая. Производительность важна, если у вас проблемы с производительностью.

3
ответ дан 8 December 2019 в 12:22
поделиться

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

Для связанного обсуждения, посмотрите:

Должны ли методы C #, которые * могут * быть статическими, быть статическими?

2
ответ дан 8 December 2019 в 12:22
поделиться

Я частично предполагаю, основываясь на наследии C #, но подозреваю, что он такой же, как и другие объектно-ориентированные языки.

Статические методы не требуют наличия объекта для работы. Хороший пример:

Double pi = Math.PI.

Методы экземпляра действительно требуют объекта. Пример такой:

Integer x = 9;
Integer y = x.sqrt();

Не для всей информации, принадлежащей классу, должен быть создан объект, чтобы этот класс получил к нему доступ. Все те константы, которые можно использовать для создания объектов ( Math.

1
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: