Статические классы в c#

 SELECT [key], CONVERT(varchar(30), CAST([key] as datetime), 103) as strDate

с вашим кодом формата, выбранным из

https://www.w3schools.com/sql/func_sqlserver_convert.asp

+++++

ваша дата в формате iso в виде строки, поэтому просто изменить ее на тип даты, а затем отформатировать тип даты с помощью встроенных функций SQL

7
задан Community 23 May 2017 в 11:49
поделиться

8 ответов

Единственная вещь, которая сразу кажется очевидной для меня, состоит в том, что статический класс является в основном просто набором ограниченных по объему функций (явно избегающий "методов" здесь), и одиночный элемент - все еще что-то, чего можно инстанцировать, даже если Вы можете только иметь 1. 1> 0.

Можно передать одиночный элемент как аргумент чему-то, что ожидает объект определенного интерфейса, Вы не можете передать статический класс никуда (кроме посредством некоторого отражательного обмана)

10
ответ дан 6 December 2019 в 10:55
поделиться

Во многих отношениях статический класс и одиночный элемент подобны. Одна большая разница - то, что одиночный элемент мог бы реализовать некоторые интерфейсы, который не возможен со статическим классом. Например, Comparer<T>.Default / EqualityComparer<T>.Default обеспечьте (через интерфейс) способность использовать объект в сортировке / использование словаря.

Также возможно (хотя хитрый) использовать одиночный элемент со стандартными платформами сериализации. Со статическим классом необходимо было бы управлять любой персистентностью состояния вручную.

4
ответ дан 6 December 2019 в 10:55
поделиться

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

Что Вы подразумеваете под "опасностью"?

2
ответ дан 6 December 2019 в 10:55
поделиться

Как Robert Gould указал, Вы освобождаете управление конструкцией. Вы также получите проблемы конструкции, которые намного более неясны. Статические классы быстро заканчиваются со статическими блоками инициализатора. Эти блоки называют в первый раз, когда кто-то ссылается на Ваш тип, и этот порядок не может быть также определен, поскольку Вам нравится думать. Таким образом, порядок выполнения этих статических инициализаторов может измениться без Вас планирующий так и может вызвать странные ошибки.

1
ответ дан 6 December 2019 в 10:55
поделиться

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

1
ответ дан 6 December 2019 в 10:55
поделиться

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

0
ответ дан 6 December 2019 в 10:55
поделиться

В контексте одноэлементной реализации нет никакой опасности, я думаю. Я часто делаю то же, реализовывая singletone через статический класс. Логически, ссылка на объект не необходима, если это является одним и уникальным.

0
ответ дан 6 December 2019 в 10:55
поделиться

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

Часто статические классы используются для содержания глобальных данных. И глобальные данные создают неявную зависимость между Вашими другими объектами / классы. Таким образом, необходимо быть carful при изменении этого "глобального объекта". Может повредить Ваше приложение.

0
ответ дан 6 December 2019 в 10:55
поделиться
Другие вопросы по тегам:

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