Какие части платформы С#.NET являются частью языка?

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

Рассмотрим класс System.Console, очевидно, что-то, что используется для чего-то особого. В сущности, эта вещь есть, чтобы играть хорошо с особенностью Windows/текущей ОС. Это не то, что я бы назвал основным компонентом языка.

С другой стороны, возьмите интерфейс System.IDisposable. Эта вещь, очевидно, очень важна, так как без нее утверждение using() бесполезно. Класс должен реализовать этот конкретный интерфейс для функции языка, в которую нужно входить.

Я мог предположить, что mscorlib является ответственной стороной здесь. Быстрый взгляд с Object Explorer показывает, что в нем действительно много компонентов, с которыми я могу согласиться, является основным, и в то же время он кладет класс Console в пространство имен System, которое является просто наполнителем.

Это понятие размещения объектов наполнителя и языка в одном пространстве имен приравнивает их, но для более глубокого понимания С# я хотел бы знать, что есть. Итак, я ищу список основных компонентов С#. Я предполагаю, что где-то есть полезная ссылка, но, поскольку я спал во время лекции Google, я не смог сформировать правильный запрос, чтобы найти его.

Спасибо заранее.

Много позже EDIT Я прочитал this Lippert blog post, это своего рода. Интересно, что конструкция foreach фактически не требует интерфейса IEnumerable.

Ответ 1

На С# не требуется очень много типов. Которые я могу придумать с головы и с быстрой проверкой спецификации:

  • System.Object
  • System.Enum
  • System.ValueType
  • Примитивные типы: System. {Int16, Int32, Int64, UInt16, UInt32, UInt64, Byte, SByte, Double, Single, Char, Boolean}
  • System.String
  • System.Decimal
  • System.Nullable < Т >
  • System.Array
  • System.Exception(и различные подклассы - см. раздел 16.4 спецификации)
  • System.Delegate(и, возможно, System.MulticastDelegate)
  • System.IDisposable
  • System.Attribute(и некоторые конкретные атрибуты, такие как ConditionalAttribute и ObsoleteAttribute)
  • System.Type
  • System.Collections.IEnumerable/IEnumerator
  • System.Collections.Generic.IEnumerable < Т > /IEnumerator <T>
  • System.Collections.Generic.IList < Т >
  • System.Threading.Monitor
  • System.Threading.Interlocked
  • System.Linq.Expressions.Expression < Т >
  • Задача и задача <T> для С# 5
  • System.GC(упоминается в спецификации, но явно не используется компилятором AFAIK)

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

Ответ 2

Возможно, поиск типов, которые являются "ядром" для языка, является неправильной отправной точкой.

Любое приложение .NET выполняется CLR, поэтому более важной перспективой является "какие основные части/классы CLR".

И это действительно для понимания С# тоже.

Ответ 3

  • Expression классы (не только Expression<T>), так как С# может преобразовывать lambdas в выражения
  • IEnumerator, IEnumerator<T>, используемые как foreach, так и yield -iterators
  • Несколько магических атрибутов для поддержки ключевых слов dynamic, params, out и методов расширения
  • System.Type