girishmeena Ответов: 2

Почему C# 2.0 ввел статический класс ?


Мне просто любопытно узнать, почему c# 2.0 ввел статический класс ? Я где-то читал, что до статического класса все использовали частный конструктор для выполнения одной и той же работы, это правда? если нет, то какова же была действительная причина?

Edit 1 : после публикации этого вопроса я снова жаждал ответа и нашел несколько хороших строк в этой ссылке - кликните сюда

Спасибо

Что я уже пробовал:

Погуглил, но не смог найти никакого ответа на этот вопрос.

BillWoodruff

Раздел о статических классах в книге, на которую вы ссылаетесь, содержит, imho, очень плохие примеры, такие как объявление структуры без 'статического модификатора (или любого другого модификатора), а затем добавление 'статического 'ctor в структуру. Совершенно странно.

2 Ответов

Рейтинг:
19

OriginalGriff

Статические классы были введены для предоставления классов,которые не могут быть созданы или унаследованы от них. Хотя вы можете создать одноэлементный класс, чтобы предотвратить существование более одного экземпляра, до версии 2.0 не было никакого способа принудительно применить его. Статические классы обеспечивают это принудительное исполнение, отказываясь разрешать члены экземпляра или конструкторы экземпляра - если вы попытаетесь это сделать, то получите ошибку компиляции. Поскольку вы не можете создать экземпляр, вы можете получить доступ к методам только через синтаксис className.memberName, и вы не можете создать переменную для ссылки на статический класс.
Позже (в версии V3.0) они были использованы для хранения методов расширения, но они не были доступны в версии V2. 0

Примеры см. в MSDN: Статические классы и члены статических классов (руководство по программированию на C# )[^]


Рейтинг:
12

Sergey Alexandrovich Kryukov

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

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

Итак,действительно ли эта синтаксическая функция необходима для функциональности? - Конечно, нет. Все будет работать и без него. Ну и что? Все может работать без свойств, шаблонов, модификаторов доступа, using заявление ... и многое другое. Вы должны понимать, что многие функции языка хороши для: надежного поведения компилятора, лучшей диагностики компилятора, удобства обслуживания, выразительных возможностей, читабельности и т. д. Смотреть также: Синтаксический сахар-Википедия, свободная энциклопедия.

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

—СА