C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines.
C# is a multi-paradigm, managed, object-oriented programming language created by Microsoft in conjunction with the .net platform. C# is also used with non-Microsoft implementations (most notably, Mono).
Versions 1.0/1.2 and 2.0 of C# were submitted and approved as both ECMA and ISO/IEC standards. As of August 2012, there are no ECMA or ISO/IEC specifications for C# 3.0 and 4.0, however language specifications are available from Microsoft (3.0 and 4.0 respectively).
The language's type system was originally static, with only explicit variable declarations allowed. However, the introduction of
var (C# 3.0) and
dynamic (C# 4.0) allow it to use type inference for implicit variable typing, and to consume dynamic type systems, respectively. Delegates (especially with lexical closure support for anonymous methods (C# 2.0) and lambda expressions (C# 3.0)) allow the language to be used for functional programming. C# 5.0 introduced the
await keywords to simplify the use of asynchronous function calls.
Compilation is usually done into the Common Intermediate Language (CIL), which is then JIT-compiled to native code (and cached) during execution in the Common Language Runtime (CLR). However, options like NGen (.NET) and AOT (Mono) mean that C# code can be directly compiled into the native image. Additionally, some frameworks (e.g. the Micro Framework) act as CIL interpreters, with no JIT.
Generics in C# are provided in part by the runtime, unlike C++ templates (generics are resolved at compile time), or Java's generics (which use type-erasure).
With the combination of Microsoft .NET for Windows (desktop/server), Mono (desktop/server/mobile), Silverlight / Moonlight (browser/mobile), Compact Framework (mobile), and Micro Framework (embedded devices), it is available for a wide range of platforms.