|
Article on other languages:
|
C#(发音为C Sharp)是由微软公司所开发的一种面向对象,且运行于.NET Framework之上的高级程序设计语言。並且成為ECMA與ISO標準规范。C#看似基於C++寫成,但又融入其它語言如Delphi、Java、VB等。
设计目标ECMA标准列出的C#设计目标:
語言特性
C# 2.0 的特性针对于.NET SDK 2.0(相对应于ECMA-334 标准第三版),C# 的新特性有: 分部类分部类将类型的实现分在多个文件中。 它允许切分非常大的类,并且如果类的一部分是自动生成的方面也很有用处。 file1.cs: public partial class MyClass { public void MyMethod1() { // implementation } } file2.cs: public partial class MyClass { public void MyMethod2() { // implementation } } 泛型泛型, 或参数化类型, 是被C#支持的.NET 2.0特性。不同于C++模版, .NET 参数化类型是在运行时被实例化,而不是编译时,因此它可以跨语言,而C++模版却不行. 它支持的一些特性并不被C++模版直接支持,比如约束泛型参数实现一个接口。另一方面,C# 不支持无类型的泛型参数。不像Java中的泛型,在CLI虚拟机中,NET generics 使用 具化 生成泛型参数, 它允许优化和保存类型信息.[1] 静态类静态类它不能被实例化,并且只能有静态成员。这同很多过程语言中的模块概念相类似。 迭代器一种新形式的迭代器 它提供了函数式编程中的generator,使用 // Method that takes an iterable input (possibly an array) // and returns all even numbers. public static IEnumerable<int> GetEven(IEnumerable<int> numbers) { foreach (int i in numbers) { if (i % 2 == 0) yield return i; } } 匿名方法public void Foo(object parameter) { // ... ThreadPool.QueueUserWorkItem(delegate { // anonymous delegates have full access to local variables of the enclosing method if (parameter == ...) { // ... } // ... }); } 委托的协变和逆变属性访问器可以被单独设置访问极别例子: string status = string.Empty; public string Status { get { return status; } // anyone can get value of this property, protected set { status = value; } // but only derived classes can change it } 可空突型可空突型 (跟个问号, 如 int? i = null; object o = i; if (o == null) Console.WriteLine("Correct behaviour - runtime version from September 2005 or later"); else Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)"); ??操作符( 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 的特性C# 作为当前版,发布于 19 November 2007,是.NET Framework 3.5 的一部分, 它的新特性灵感来自于函数式编程语言,如:Haskell 和 ML,并广泛地引入了Language Integrated Query (LINQ) 模式到通用语言运行时中e.[4] LinqLanguage Integrated Query:[5] " 类型初始化器
可写作:
集合初始化器MyList list = new MyList(); list.Add(1); list.Add(2); 可写作 MyList list = new MyList { 1, 2 }; 假设 Anonymous types
局部变量类型推断局部变量 类型推断: var x = new Dictionary<string, List<float>>(); 等同于
Dictionary<string, List<float>> x = new Dictionary<string, List<float>>
它只是一个语法糖, 这个特性被匿名类型声明时所需要 Lambda表达式Lambda表达式指: 编译器翻译Lambda表达式为强类型委托或强类型表达式树. 自动化属性编译器将自动生成私有变量和透当的getter和setter,如: 扩展方法扩展方法指,一个静态类包含this关键字作为方法的第一参数时,这个方法将被添加到该this的类型中: public static class IntExtensions { public static void PrintPlusOne(this int x) { Console.WriteLine(x + 1); } } int foo = 0; foo.PrintPlusOne(); 局部方法Allow codegenerators to generate method declarations as extension points that are only included in the source code compilation if someone actually implements it in another portion of a partial class.[7] 程序的执行C#并不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过.NET Framework的虚拟机——被称之为通用语言运行时.NET CLR(Common Language Runtime)——执行。 所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。 在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。 标准化微软公司已经向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。现在有一些独立的实现正在进行,包括:
C#的Hello World程式下面是一個在命令列上輸出Hello World的小程序,這種程序通常作為開始學習程序語言的第一個步驟: using System; class HelloWorld { public static void Main() { Console.WriteLine("Hello, world!"); } } 实现C# 有5個著名的編譯器(compilers):
参见外部鏈接
|
|||||||||||||||||||||||||||||||||||||||||
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net