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 async
and 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.
Hello World Example:
using System;
class Hello
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
FAQs
- What are the correct version numbers for C#?
- Why is
Random
giving the same results every time? - Captured variables in loops
- Why can’t I convert
List<Banana>
toList<Fruit>
? - Does C# pass objects by reference?
- Why does the compiler complain about my conditional expression (
a == b ? x : y
)? - Why do I get a
NullReferenceException
? (Object reference not set to instance of object) - What’s new in C# 4.0?
- What’s new in .NET 4.5?
- What’s new for C# in Visual Studio 2012?
Resources
Books
- CLR via C#
- C# in a Nutshell
- C# in Depth
- Accelerated C#
- Head First C#
- The C# Programming Language (3rd Edition, 4th Edition)
- Framework Design Guidelines
- Essential C# (4.0 (3rd Edition))
- Pro C# 2010 and the .NET 4 Platform
- MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework 2.0 Foundation
- C# How to Program
- Visual C# .NET Step by Step
NOTE: The content of this tag was originally posted at StackOverflow.com
- Betty asked 15 years ago
- last active 14 years ago