C♯

title: 命名.
content: C#的发音为“C sharp”,“#”读作“sharp”(),命名启发于音乐上的音名“C♯”,在音乐中“C♯”表示C升半音,为比C高一点的音节,且“#”形似4个加号,微软借助这样的命名,以表示C#在一些语言特性方面对C++的提升的意思。  由于显示器(标准字体、浏览器等)的技术限制,且大部分的键盘配置上不存在升记号(♯),所以井号(#)被用于此程序语言的名称中,约定在ECMA-334 C#语言规范中。
title: 设计目标.
content: ECMA标准列出的C#设计目标:
title: 历史.
content: 原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++ 的影响。
title: 语言特性.
content: 相对于C和C++,这个语言在许多方面进行了限制和增强:
title: C# 2.0的特性.
content: 针对于.NET SDK 2.0(相对应于ECMA-334标准第三版),C# 的新特性有:
title: 分部类别.
content: 分部类别将类别的实现分在多个文件中。该概念于C# 中首次出现,除了能将一个类别的成员分开存放,还使ASP.NET中的代码后置得以实现。代码后置实现了HTML代码和后台交互代码的分离。  file1.cs:  public partial class MyClass1 file2.cs: public partial class MyClass1 } 分部类别这个特性允许将一个类别的编写工作分配给多个人,一人写一个文件,便于版本控制。它又可以隔离自动生成的代码和人工书写的代码,例如设计窗体应用程序时。
title: 泛型.
content: 泛型,或参数化类型,是被C#支持的.NET 2.0特性。不同于C++模版,.NET参数化类型是在运行时被实例化,而不是编译时,因此它可以跨语言,而C++模版却不行。它支持的一些特性并不被C++模版直接支持,比如约束泛型参数实现一个接口。另一方面,C# 不支持无类型的泛型参数。不像Java中的泛型,在CLI虚拟机中,.NET generics使用具化生成泛型参数,它允许优化和保存类型信息。
title: 静态类别.
content: 静态类别它不能被实例化,并且只能有静态成员。这同很多过程语言中的模块概念相类似。
title: 迭代器.
content: 一种新形式的迭代器它提供了函数式编程中的generator,使用codice_1  类似于Python中使用的codice_2 // Method that takes an iterable input (possibly an array) // and returns all even numbers. public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
title: 匿名方法.
content: 匿名方法类似于函数式编程中的闭包。 public void Foo(object parameter)
title: 委托的协变和逆变.
content: 委托签名的协变和逆变,
title: 属性访问器可以被单独设置访问级别.
content: 例子: string status = string.Empty;  public string Status
title: 可空类型.
content: 可空类型(跟个问号,如codice_3)允许设置codice_4给任何类类型。 int? i = null; object o = i; if(o == null) else
title: ??运算子.
content: (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.
title: C# 3.0的特性.
content: C# 3.0发布于2007年10月17日,是.NET Framework 3.5的一部分,它的新特性灵感来自于函数式编程语言,如:Haskell和ML,并广泛地引入了Language Integrated Query(LINQ)模式到通用语言运行库中e.
title: Linq.
content: 语言集成查询(英语:Language Integrated Query,缩写:LINQ): 上下文相关关键字"codice_6, codice_7, codice_8"可用于查询SQL、XML、集合等。这些标识符在LINQ上下文中被作为关键字,但是它们的增加不会破坏原有的名为codice_6、codice_7或codice_8的变量。
title: 类型初始化器.
content: Customer c = new Customer(); c.Name = "James";  可写作:  Customer c = new Customer() { Name="James" };
title: 集合初始化器.
content: MyList list = new MyList(); list.Add(1); list.Add(2); 可写作 MyList list = new MyList { 1, 2 }; 假设codice_12实现了codice_13且有一个codice_14方法method
title: 匿名类型.
content: var x = new { Name="James" };
title: 局部变量类型推断.
content: 局部变量类型推断:var x = new Dictionary<string, List<float»(); 等同于 Dictionary<string, List<float» x = new Dictionary<string, List<float»(); 它只是一个语法糖,这个特性被匿名类型声明时所需要
title: Lambda表达式.
content: Lambda表达式(无函式名称的物件方法在程序语言中的表达语法):  listOfFoo.Where( ) listOfFoo.Where(x => x.Size > 10);  编译器翻译Lambda表达式为强类型委托或强类型表达式树.
title: 自动化属性.
content: 编译器将自动生成私有变量和适当的getter(get访问器)和setter(set访问器),如:  public string Name
title: 扩展方法.
content: 扩展方法指,一个静态类包含this关键字作为方法的第一参数时,这个方法将被添加到该this的类型中: public static class IntExtensions int foo = 0; foo.PrintPlusOne();
title: 分部方法.
content: 允许代码生成器生成方法声明作为扩展点,如果有人在另一个部分类实现了它才会被包含于原代码编译。  例子:  partial class C partial class C
title: C# 4.0的特性.
title: 动态查阅.
content: C# 4.0新增dynamic关键字,提供动态编程(dynamic programming),把既有的静态物件标记为动态物件,类似javascript, Python或Ruby。  dynamic关键字标记的字段被处理成一个特殊包装的object对象,它取消了CLI的编译时类型检查 dynamic calc = GetCalculator(); int sum = calc.Add(10, 20);
title: 具名参数与可选参数.
content: public StreamReader OpenFile(  呼叫OpenFile时,顺序可以完全颠倒:  OpenFile(bufferSize: 4096, path: "foo.txt");
title: 与COM组件互动.
content: 在C#中打开一个Word文件:  static void Main(string[] args) {  在C#中指定Excel的某一格文字:  excelObj.Cells[5, 5].Value = "This is sample text";
title: 泛型的协变和逆变.
content: C# 4.0支援协变和逆变,例如在泛型接口可以加上in、out修饰字。
title: C# 7.0的特性.
content: 加入 out 变量;能够直接宣告一个变量在它要传入的地方,当成一个 out 的引数
title: 程序的执行.
content: C#通常不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过.NET Framework的虚拟机——被称为通用语言运行库——执行。  所有的.Net编程语言都被编译成这种被称为通用中间语言的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。如果计算机上没有安装.Net Framework,那么这些程序会弹出对话框,要求用户下载.net framework。  在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。
title: 标准化.
content: 微软公司已经向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。现在有一些独立的实现正在进行,包括:
title: C# 的Hello World程序.
content: 下面是一个在命令列上输出Hello World的小程序,这种程序通常作为开始学习程序语言的第一个步骤:  using System;  namespace ConsoleApp1
title: 实现.
content: C# 有5个著名的编译器(compilers):

Summary: C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#是一种由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性,使其成为C语言家族中的一种高效强大的编程语言。C#以.NET框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言,希望借助这种语言来取代Java。C#已经成为Ecma国际和国际标准组织的标准规范。