Консоль C # (пояснение статического класса)

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


person Ptr    schedule 19.10.2010    source источник
comment
У вас может быть больше одной консоли, если я не ошибаюсь. Вы можете использовать новую консоль, например, давать консольный вывод из приложения Windows, у которого есть собственная консоль для отладочной информации.   -  person Jens    schedule 19.10.2010
comment
Могу я? Что ж, меня это сбивает с толку, так как я думал, что это статический класс   -  person Ptr    schedule 19.10.2010
comment
System.Console - это статический класс, да.   -  person Andrew Barber    schedule 19.10.2010


Ответы (3)


Консоль - это статический класс. Для каждого приложения может быть только одна консоль. Когда вы вызываете методы в классе Console, используется этот единственный класс Console. То же самое верно для любого статического типа или статического члена. Static-something не может иметь несколько экземпляров в одном приложении / домене приложения.

person explorer    schedule 19.10.2010
comment
Да, я так думал. Думаю, это более наглядно, чем примеры на MSDN. - person Ptr; 19.10.2010
comment
@Ptr ... в MSDN иногда разговаривают с кем-то другим, а не с вами и мной :) - person explorer; 19.10.2010
comment
Что насчет того, что в MSDN предполагает, что System.Console не статичен? - person Andrew Barber; 19.10.2010
comment
@Adrew ... Ptr жаловался на то, что класс консоли не упоминается как типичный пример статических типов. Он не говорит, что это не объявлено статичным. - person explorer; 19.10.2010
comment
@Adrew: Я не говорю, что это не статично. Собственно, я написал, что это кажется мне идеальным статическим классом, который можно использовать для объяснения. - person Ptr; 19.10.2010

System.Console не была изначально объявлен как static, потому что он существует с .NET 1.1, который не поддерживает статические классы, а только статические члены.

person Frédéric Hamidi    schedule 19.10.2010

Если вы спрашиваете «почему это не статический класс» - это статический класс:

public static class Console

Но если вы спросите, почему он не используется в качестве полезного примера статического класса:

.. почему в MSDN они не показывают консоль как типичный статический класс ...

Базовая документация по API (включая для класса Console) на В MSDN основное внимание уделяется механике каждой функции и небольшому примеру синтаксиса и кода, которые вы могли бы написать для использования этой функции. Он описывает возможности, предоставляемые каждой функцией или классом. Он описывает программные контракты, включая пространство имен и сборки, от которых зависит функция, списки членов, возвращаемые значения, ожидаемые диапазоны ввода, обработка ошибок и родительские классы в иерархии наследования.

Эта документация не фокусируется на том, как каждая функция вписывается в экосистему архитектуры программирования, или на передовых методах программирования. Часто в нем не упоминаются альтернативные варианты или компромиссы, связанные с использованием этой функции. Действительно, многие примеры в документации API являются примерами плохих практик программирования, а некоторые из них даже не компилируются.

В MSDN есть и другие разделы, которые касаются архитектурных проблем, передовых методов программирования и примеров того, почему функция была полезна для платформы .NET (например, Безопасные дескрипторы и шаблон Dispose). Может быть, вы просто не нашли (или нет) статьи о статических классах, их использовании и существующих примерах во фреймворке?

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

person Merlyn Morgan-Graham    schedule 19.10.2010