C♯
C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#是一种由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性，使其成为C语言家族中的一种高效强大的编程语言。C#以.NET框架类库作为基础，拥有类似Visual Basic的快速开发能力。C#由安德斯·海尔斯伯格主持开发，微软在2000年发布了这种语言，希望借助这种语言来取代Java。C#已经成为Ecma国际和国际标准组织的标准规范。
C#的发音为“C sharp”，“#”读作“sharp”（），命名启发于音乐上的音名“C♯”，在音乐中“C♯”表示C升半音，為比C高一点的音节，且“#”形似4个加号，微软借助这样的命名，以表示C#在一些语言特性方面对C++的提升的意思。
由於顯示器（標準字體、瀏覽器等）的技術限制，且大部分的鍵盤配置上不存在升記號（♯），所以井號（#）被用於此程式語言的名稱中，約定在ECMA-334 C#語言規範中。
ECMA标准列出的C#设计目标：
原Borland公司的首席研发设计师安德斯·海爾斯伯格（Anders Hejlsberg）在微軟開發了Visual J++ 1.0，很快的Visual J++由1.1版本升級到6.0版。SUN公司认为Visual J++ 违反了Java开发平台的中立性，对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”（PDC 2000）上，發表新的语言C#。C#语言取代了Visual J++，語言本身深受Visual Basic、Java、C和C++ 的影響。
相對於C和C++，這個語言在許多方面進行了限制和增強：
针对于.NET SDK 2.0（相对应于ECMA-334标准第三版），C# 的新特性有：
分部類別将類別的实现分在多个文件中。该概念于C# 中首次出现，除了能将一个類別的成员分开存放，还使ASP.NET中的代码后置得以实现。代码后置实现了HTML代码和后台交互代码的分离。
file1.cs:
public partial class MyClass1 file2.cs: public partial class MyClass1 }  分部類別这个特性允许将一个類別的编写工作分配给多个人，一人写一个文件，便于版本控制。它又可以隔离自动生成的代码和人工书写的代码，例如设计窗体应用程序时。
泛型，或参数化类型，是被C#支持的.NET 2.0特性。不同于C++模版，.NET参数化类型是在运行时被实例化，而不是编译时，因此它可以跨语言，而C++模版却不行。它支持的一些特性并不被C++模版直接支持，比如约束泛型参数实现一个接口。另一方面，C# 不支持无类型的泛型参数。不像Java中的泛型，在CLI虚拟机中，.NET generics使用具化生成泛型参数，它允许优化和保存类型信息。
静态類別它不能被实例化，并且只能有静态成员。这同很多过程语言中的模块概念相类似。
一种新形式的迭代器它提供了函数式编程中的generator，使用codice_1
类似于Python中使用的codice_2 // Method that takes an iterable input (possibly an array) // and returns all even numbers. public static IEnumerable GetEven(IEnumerable numbers) 匿名方法类似于函数式编程中的闭包。 public void Foo(object parameter)
委托签名的协变和逆变,
例子： string status = string.Empty;
public string Status
可空类型（跟个问号，如codice_3）允许设置codice_4给任何类类型。 int? i = null; object o = i; if(o == null) else （codice_5）用于如果類別不为空值时回傳它自身，如果为空值则返回之后的操作 object nullObj = null;  object obj = new Object();  return nullObj ?? obj; // returns obj 主要用作将一个可空类型赋值给不可空类型的简便语法 int? i = null; int j = i ?? 0; // Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. C# 3.0发布于2007年10月17日，是.NET Framework 3.5的一部分，它的新特性灵感来自于函数式编程语言，如：Haskell和ML，并广泛地引入了Language Integrated Query（LINQ）模式到通用語言運行庫中e.
语言集成查询（，缩写：LINQ）： 上下文相关关键字"codice_6, codice_7, codice_8"可用于查询SQL、XML、集合等。这些标识符在LINQ上下文中被作为关键字，但是它们的增加不会破坏原有的名为codice_6、codice_7或codice_8的变量。
Customer c = new Customer(); c.Name = "James";
可写作：
Customer c = new Customer() { Name="James" }; MyList list = new MyList(); list.Add(1); list.Add(2); 可写作 MyList list = new MyList { 1, 2 }; 假设codice_12实现了codice_13且有一个codice_14方法method
var x = new { Name="James" };
局部变量类型推断：var x = new Dictionary语法糖，这个特性被匿名类型声明时所需要
Lambda表达式（無函式名稱的物件方法在程式語言中的表達語法）:
listOfFoo.Where( ) listOfFoo.Where(x => x.Size > 10);
编译器翻译Lambda表达式为强类型委托或强类型表达式树.
编译器将自动生成私有变量和适当的getter（get访问器）和setter（set访问器），如：
public string Name
扩展方法指，一个静态类包含this关键字作为方法的第一参数时，这个方法将被添加到该this的类型中： public static class IntExtensions int foo = 0; foo.PrintPlusOne(); 允许代码生成器生成方法声明作为扩展点，如果有人在另一个部分类实现了它才会被包含于原代码编译。
例子：
partial class C partial class C C# 4.0新增dynamic关键字，提供動態編程（dynamic programming），把既有的靜態物件標記為動態物件，類似javascript, Python或Ruby。
dynamic关键字标记的字段被处理成一个特殊包装的object对象，它取消了CLI的编译时类型检查 dynamic calc = GetCalculator(); int sum = calc.Add(10, 20);
public StreamReader OpenFile(
呼叫OpenFile時，順序可以完全顛倒：
OpenFile(bufferSize: 4096, path: "foo.txt"); 在C#中打開一個Word文件：
static void Main(string[] args) {
在C#中指定Excel的某一格文字：
excelObj.Cells[5, 5].Value = "This is sample text"; C# 4.0支援协变和逆变，例如在泛型介面可以加上in、out-{zh:修饰字;zh-hk:修饰字;zh-cn:关键字}-。 加入 out 變數；能夠直接宣告一個變數在它要傳入的地方，當成一個 out 的引數
C#通常不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似，它被编译成为中间代码（Microsoft Intermediate Language），然后通过.NET Framework的虚拟机——被称为-{zh-hans:通用语言运行库;zh-hant:通用語言執行層}-——执行。
所有的.Net编程语言都被编译成这种被称为通用中间语言的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。如果计算机上没有安装.Net Framework，那么这些程序会弹出对话框，要求用户下载.net framework。
在程序执行时，.Net Framework将中间代码翻译成为二进制机器码，从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区（Buffer）中。所以一旦程序使用了相同的代码，那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行，那么这种翻译不需要进行第二次，速度明显加快。
微软公司已经向ECMA申请将C#作为一种标准。在2001年12月，ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准（ISO/IEC 23270）。现在有一些独立的实现正在进行，包括：
下面是一個在-{zh:命令列;zh-hans:命令行;zh-hant:命令提示字元}-上輸出Hello World的小-{zh:程序;zh-hans:程序;zh-hant:程式}-，這種-{zh:程序;zh-hans:程序;zh-hant:程式}-通常作為開始學習-{zh:程序;zh-hans:程序;zh-hant:程式}-語言的第一個步驟：
using System;
namespace ConsoleApp1
C# 有5個著名的編譯器（compilers）: