Почему статические классы используются?

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

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

Некоторое время в классах (не статичный) я нахожу статические методы. Какое преимущество advantage/perfomance делают статические методы передают методам экземпляра в практическом.

8
задан Finglas 9 February 2010 в 10:00
поделиться

5 ответов

Вы должны иметь возможность использовать свой исходный сценарий без изменений - $2 ~ name уже выполняет regex-поиск, поэтому если вызвать сценарий с name = ^ Mc , то он вернет имена, начинающиеся с «Mc». На самом деле это не хороший пример, так как Mc появляется только в начале имени - если вы используете name = ^ Smith , то он найдет Smiths, но не McSmiths.

-121--2275683-

Используйте class-dump-x / -z , чтобы получить частные заголовки Objective-C для операционной системы OS X/iPhone рамок. Существует много классов/методов, скрытых от общественности (некоторые справедливо)

-121--2901441-

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

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

Используйте с умом.

19
ответ дан 5 December 2019 в 05:56
поделиться

Применение ключевого слова static к классу является соглашением языка C # и не означает ничего особенного для CLR. Он просто гарантирует, что все члены также статичны и что вы не сможете случайно создать экземпляр класса с ключевым словом new .

Достоинства статических методов обсуждаются в этой ветке.

6
ответ дан 5 December 2019 в 05:56
поделиться

Поскольку Геопункты принимает широты и долготы в микродегреях, просто создайте свою точку так:

GeoPoint point = new GeoPoint((int)(latitude * 1e6),
                              (int)(longitude * 1e6));
-121--1600207-

Если вас не волнует малое разрешение, это просто вопрос гибкости: когда вы используете абсолютное позиционирование, вы ломаете поток. Значит, все должно быть точно по размеру.

Для многих элементов или ситуаций (сделать идеальное название изображения...) это лучший (а иногда и уникальный) выбор. Большую часть времени «относительный» лучше, потому что он сохранял поток (элемент остается в потоке), но вы можете изменить позиционирование относительно позиционированного родителя (не забудьте позиционировать родителя, даже если вы не даете явное положение; например, просто добавить положение: относительное, без верхнего/левого...). И, хорошая точка, «позиция: relative» дают хазаут элементу в IE !

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

Float не является идеальным решением, так как вы можете прочитать во многих блогах: это очень специфическая позиция, но это полезно, потому что «встроенный блок» не работает все время. И, конечно, это также полезно, когда вы действительно хотите, чтобы элементы были плавающими.

Не так просто объяснить, когда вы плохо говорите по-английски:)

-121--4859516-

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

2
ответ дан 5 December 2019 в 05:56
поделиться

Статические классы отлично подходят для определения статических методов. Это классический подход «служебного класса». Однако будьте предельно осторожны с сохранением состояния (т. Е. Определения полей) в статическом классе. В нашем многопоточном мире это может привести к непредсказуемому поведению программы, если вы не синхронизируете доступ к статическим полям.

1
ответ дан 5 December 2019 в 05:56
поделиться

Статические свойства в основном используются для представления контекста выполняющегося кода. И вы можете найти подтверждение этому в каждой части стека .NET.
ASP.NET - HttpContext.Current
Threading - Thread.CurrentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Статический класс Dispatcher
и т. Д.
для меня является просто контейнером для служебных методов.

0
ответ дан 5 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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