C#

C#

C# — это мультипарадигмальный управляемый объектно-ориентированный язык программирования со сборкой мусора, созданный Microsoft совместно с платформой .

Версии 1.0/1.2 и 2.0 C# были представлены и утверждены как стандарты ECMA и ISO/IEC . По состоянию на декабрь 2010 г. спецификаций ECMA или ISO/IEC для C# 3.0 и 4.0 не существует, однако спецификации языка доступны в Microsoft ( 3.0 и 4.0 соответственно).

Система типов языка изначально была статической, и разрешалось только явное объявление переменных. Однако введение var (C# 3.0) и dynamic (C# 4.0) позволяет использовать вывод типов для неявной типизации переменных и использовать динамические системы типов соответственно. Делегаты (особенно с поддержкой лексического закрытия для анонимных методов (C# 2.0) и лямбда-выражений (C# 3.0)) позволяют использовать язык для функционального программирования.

Компиляция обычно выполняется в Common Intermediate Language (CIL), который затем JIT-компилируется в машинный код (и кэшируется) во время выполнения в Common Language Runtime (CLR); однако такие варианты, как Ngen (.NET) и AOT (Mono), означают, что это не единственный вариант. Кроме того, некоторые фреймворки (например, Micro Framework) действуют как интерпретаторы CIL без JIT.

Возможно, необычно то, что дженерики в C# предоставляются (частично) средой выполнения, в отличие (для сравнения) от шаблонов C++ или дженериков Java (которые используют стирание типов).

Благодаря сочетанию Microsoft .NET для Windows (настольный/серверный), Mono (настольный/серверный/мобильный), Silverlight/Moonlight (браузерный/мобильный), Compact Framework (мобильный) и Micro Framework (встроенные устройства) он доступен для широкого спектра платформ.

Привет, мир

using System; class Hello { static void Main() { Console.WriteLine("Hello, World"); } }

Часто задаваемые посты

  • Какие правильные номера версий для C#?
  • Почему Random каждый раз выдает одинаковые результаты?
  • Захваченные переменные в циклах
  • Почему я не могу конвертировать List<Banana> в List<Fruit>?
  • Передает ли С# объекты по ссылке?

Ресурсы

  • Спецификация
  • Статья в Википедии
  • Блог Эрика Липперта
  • Руководство по программированию
  • Книги
    • CLR через C#
    • Коротко о C#
    • C# в глубину
    • Ускоренный C#
    • Глава первая C#
    • Язык программирования C# (3-е издание , 4-е издание)
    • Руководство по проектированию фреймворка
    • Essential C# (4.0 (3-е издание))