C♯ 2.0 的特性
来自站长百科
导航:上一页|C语言 | C++ | C♯ |JAVA | Perl | Pascal | Visual Basic
针对于.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 使用 具化 生成泛型参数, 它允许优化和保存类型信息.
静态类[ ]
静态类它不能被实例化,并且只能有静态成员。这同很多过程语言中的模块概念相类似。
迭代器[ ]
一种新形式的迭代器 它提供了函数式编程中的generator,使用yield return 类似于Python中使用的yield
// 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;) 允许设置 null 给任何类类型。
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.