Какой смысл статического метода в нестатическом классе?

SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

Редактирование: первые два метода являются по существу тем же, и выполняют преобразование в varchar метод.

30
задан K Scandrett 13 October 2016 в 05:38
поделиться

6 ответов

Статический класс означает, что вы не можете использовать его в нестатическом контексте, а это означает, что вы не можете создать экземпляр объекта этого класса и вызвать метод. Если вы хотите использовать свой метод печати, вам нужно будет сделать:

myOtherClass.print("vhhhat?");

Это не статично, поскольку вы создали экземпляр класса с именем moc :

myOtherClass moc = new myOtherClass();
22
ответ дан 27 November 2019 в 23:58
поделиться

Это будет означать, что я не могу получить доступ к статическому методу в нестатическом контексте, но Test и main являются статическими, что это означает?

Это относится к тому факту, что вы ссылка на статический метод (myOtherClass.print) с использованием экземпляра (moc). Вам придется переделать это так, чтобы оно было:

myOtherClass.print("vhhhat?");

Это будет правильно компилироваться.

Статические методы - это методы, которые работают с самим классом, а не с конкретным экземпляром класса. Это имеет много применений, например, для реализации шаблона метода фабрики .

12
ответ дан 27 November 2019 в 23:58
поделиться

Во-первых, ошибка:

moc.print("vhhhat?");

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

myOtherClass.print("vhhhat?");

. Что касается первого вопроса, есть много причин для использования статических методов в нестатическом классе. По сути, если есть операция, связанная с классом, но не с каким-либо конкретным экземпляром класса, это должен быть статический метод. Например, String.Format () (или любой из статических методов String) не должен работать с экземплярами строк, но они должны быть связаны с классом String. Следовательно, они статичны.

11
ответ дан 27 November 2019 в 23:58
поделиться

Иногда «цель» функции специфична для класса, а не для объекта (экземпляра класса).

Например, фабричный метод:

SomeClass obj = SomeClass.CreateInstance();

Это больше очевиден, когда в языке есть средства метапрограммирования, позволяющие выполнять операции с классами. В Python это различие делается более явным по соглашению: первый параметр, переданный функции, называется либо как-то вроде «cls» или «self», и указывает, что функция может работать с классом (когда это «метод класса»). или экземпляр (тип, к которому вы больше привыкли, когда это метод экземпляра).

3
ответ дан 27 November 2019 в 23:58
поделиться

Вот хороший пример использования статических методов в нестатическом классе:

Обратные вызовы ASP.NET AJAX для веб-методов на страницах ASPX

1
ответ дан 27 November 2019 в 23:58
поделиться

Когда вы вызываете метод для экземпляра объекта , вы вызываете его в нестатическом контексте. Неважно, каким методом вы это делаете.

0
ответ дан 27 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

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