900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > [转]C# 2.0新特性与C# 3.5新特性

[转]C# 2.0新特性与C# 3.5新特性

时间:2019-04-18 16:48:08

相关推荐

[转]C# 2.0新特性与C# 3.5新特性

C# 2.0新特性与C# 3.5新特性

一、C# 2.0 新特性:

1、泛型

List<MyObject> obj_list=new List();

obj_list.Add(new MyObject());

2、部分类(partial)

namespace xxx

{

public partial class Class1

{

private string _s1;

public string S1

{

get { return _s1; }

set { _s1 = value; }

}

}

//或在另一个文件中

public partial class Class1

{

public string GetString()

{

string s = this.S1 + "aaa";

return s;

}

}

}

3、静态类

public static class MyStaticObject

{

private static string _s;

static MyStaticObject()

{

_s = "Hello";

}

public static string Mothed1()

{

return _s + ",world.";

}

}

4、属性访问器可访问性

public class Class2

{

private string _str;

public string Str

{

get { return _str; }

protected set { _str = value; }

}

}

5、可空类型

int? aa = null;

aa = 23;

if (aa.HasValue)

{

int bb = aa.Value;

}

6、匿名方法

class SomeClass //在C#1.0中

{

delegate void SomeDelegate();

public void InvokeMethod()

{

SomeDelegate del = new SomeDelegate(SomeMethod);

del();

}

void SomeMethod()

{

MessageBox.Show("Hello");

}

}

class SomeClass2

{

public delegate void SomeDelegate();

public void InvokeMothed()

{

SomeDelegate del = delegate {

MessageBox.Show("Hello");

};

del();

}

}

7、名称空间别名限定符

global::

二、C# 3.0/3.5 新特性:

1、LinQ(语言集成查询)

以前,查询XML文件使用XPath,数据库刚用SQL,LinQ搜索任何IEnumerable数据源.

在ORM解决方案中,LINQ对象用途很大.

示例:

List customers = new List();

IEnumerable query_result = from c in customers

where c.Money > 100

orderby c.Name

select c;

Linq 包括 Linq to SQL, Linq to Objects, Linq to XML 和 Entity Framework 等几个部分

2、Lambda表达式。更激动人心的,是一种匿名函数结构,它可以方便的实现委托、查询综合和扩展方法的 delegate 类型参数的初始化定义.

示例:原来的:

delegate void Func(int x);

void Add(int x){x++;}

Func f=new Func(Add);

f(1);

可简化为:

Func f=(x)=>{x++;};

或:

Func f=(int x )=>{x++;};

3、隐式类型本地变量。var关键字(类型脚本语言中的隐式声明变量,主要针对LinQ设计)

var num=0;

var nums[]={1,2,3,4,5};

var num='a';

var list=new List();

foreach(var i in nums){

num+=i;

}

4、扩展方法。extension(允许您扩充任何类,甚至是标记为封装的类,对于扩展的方法必须在静态类里来扩展)

示例,在string上实现Count()方法:

using pilerService;

public class Extensions{

[Extension()]

public int Count(this string source){

int count = 0;

foreach (var item in source){

count++;

}

return count;

}

}

//使用:

string s="Hello,world!";

int i=s.Count();

5、对象和集合初始值设定项。初始化的简化,写实体类方便了

public class Person{

public string Name{get;set;} //自动实现属性

public int Age{get;set;}

}

var person1=new Person{Name="tang",Age=21}; //...

var persons=new List{ //集合初始化器

new Person{Name="TEW",Age=21},

new Person{Name="RSA",Age=18}

};

6、宽松委托。宽松委托使得 C# 在判断委托实例化赋值时,对于签名不同的函数可以接受。例如 EventArgs 和 MouseEventArgs 是具备继承关系的类,当它们出现在同一个接受 EventArgs 类型参数的委托定义中时,编译器对于这两种委托都能接受。例如:

delegate void A (object sender, MouseEventArgs e);

delegate void B (int a, int b);

EventHandler e1, e2;

e1 = new A(...); // OK

e2 = new EventHandler(...); // OK

e1 = e2; // OK

B b = (long a, int b) +> ...{ }; // OK

7、自动实现属性。

在定义类的属性时,常常需要像下面的代码一样封装一个域。

private string name;

public string Name ...{ get ...{ return name; } set ...{ name = value; } }

C# 3.0 提供了一种简化的属性定义方法,可以实现上述代码的作用。

public string Name ...{ get; set; }

这就是自动实现属性。编译器自动实现类似域封装的代码。不过自动实现属性不能定义只读和只有 get 过程的属性;set 也不能具备访问性描述。

8、匿名类型

匿名类型常常用在查询表达式的结果中,因为这种类型的返回值往往是一个包含一种特定类型的 IEnumerable<T>。例如,要从上面的例子中选出年龄大于 21 岁,身高大于 160 厘米的 Person 集合,可以采用如下形式。

var result = from person in persons where person.Age >= 21 && person.Height >= 160

select new ...{ Name = person.Name, Age = person.Age, Height = person.Height / 100 };

new { Name = person.Name, Age = person.Age, Height = person.Height / 100 } 是一个匿名类型,编译器将对它做如下声明。

public class _Anonymous_Name_Age_Height ...{

public string Name;

public string Age;

public decimal Height;

}

9、分部方法(partial分部类的分部方法,必须是void返回类型)

// 文件 1.cs

public partial class A{

void B(); //声明

}

// 文件 2.cs

public partial class A{

void B { Console.WriteLine("B invoked."); } //实现

}

这种语法可以把函数的定义和声明分开编写。使用分部方法需要注意:

1、分部方法的类实体必须为 partial。

2、分部方法的返回值必须为 void。

3、如果没有实现分部方法,但却定义了此方法的声明,在使用这个包含分部方法的类时,编译器自动将没有实现的方法签名移除。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
C# 3.0新特性

C# 3.0新特性

2022-10-10

C# 6.0 新特性

C# 6.0 新特性

2022-12-28

C# 6 的新特性~

C# 6 的新特性~

2019-12-09

C# 6.0新特性

C# 6.0新特性

2020-07-31