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 和 ADO.NET 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 System.Runtime.CompilerService;
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# 2.0新特性与C# 3.5新特性相关推荐

  1. Thorntail 2.2.0提供从WildFly Swarm自动迁移的特性

    自6月底宣布把WildFly Swarm2018.5.0改名为Thorntail2.0.0以来,Red Hat在8月中旬以后的三个周里发布了Thorntail 2.1.0版本和2.2.0版本.除了许多 ...

  2. Kinect SDK v1.7 新特性、交互框架与新概念

    Kinect SDK v1.7 新特性.交互框架与新概念 zouxy09@qq.com http://blog.csdn.net/zouxy09 2013年3月18日,微软Kinect for Win ...

  3. Oracle 21C 新特性:数据泵相关新特性汇总

    墨墨导读:本文来自墨天轮用户"JiekeXu"投稿,墨天轮主页:https://www.modb.pro/u/434,本文分享Oracle 21c 新特性:数据泵相关新特性汇总. ...

  4. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...

    原文:重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 [源码下载] 重新想象 Wind ...

  5. 140版本 boost_看完这篇,相信对UB4.0 boost这双鞋你会有新的感受!

    原标题:看完这篇,相信对UB4.0 boost这双鞋你会有新的感受! 在如今的Sneaker世界中,总有那么两三款鞋,只要提到它的名字,就能引发鞋迷们的强烈关注.adidas UltraBOOST便是 ...

  6. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  7. android treble 三星,升级安卓8.0后 三星旗舰不在支持Treble特性

    原标题:升级安卓8.0后 三星旗舰不在支持Treble特性 从Android 8.0发布之后,谷歌就一直推介Project Treble,Treble特性来源于安卓兼容性测试,在CTS的框架下,开发者 ...

  8. 【小家java】java10新特性(简述十大新特性) 小步迭代

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  9. Java11新特性(一)——JDK11新特性概述

    序言 关于JDK11,自从去年也就是2018年9月份 Oracle 对外公布--JDK11正式发布以来,博主就跃跃欲试,但是由于项目周期时间紧,一直未果,今年,也就是2019年2月底系统正式上线,博主 ...

最新文章

  1. 将LSTM与word2vec结合实现中文自动写作
  2. 12.委托是什么?委托的property声明用什么属性?为什么?
  3. 英语网络聊天中的一些习惯性缩写
  4. autowired java配置_Spring自动注解标签@Autowired不能注入xml配置的bean吗?
  5. CDH6.3.2之YARN生产环境调优(yarn 生产必做优化项)
  6. ELK技术栈—Logstash—基础介绍
  7. Linux系统下不同机器之间拷贝文件的方法
  8. 使用Java扫描DynamoDB项目
  9. java 正则匹配括号是否成对_十分钟学会正则表达式
  10. CentOS 7 防火墙命令
  11. libjpeg(1)
  12. 图嵌入知识表征の初体验
  13. JavaWeb——拦截器HandlerInterceptor
  14. Idea-Plugin编写Android Studio插件
  15. shell 小米system锁adb_小米解锁Bootloder和system分区,获取完整root
  16. 在python中安装插件pynput实现聊天窗口消息轰炸
  17. android screencap,android – “adb screencap /sdcard/screenshot.raw”生成什么格式? (没有“-p”标志)...
  18. 19 枚举类型 Enumerated
  19. 流程管理——免费BPM软件
  20. 科研神器Latex:algorithm2e算法常用技巧小结

热门文章

  1. Python脱产8期 Day02
  2. firefox下的调试工具
  3. python--属性魔法方法
  4. PHP中MD5函数漏洞
  5. How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)
  6. 判断是否移动端设备的JS代码,超短,百度都用它
  7. 1057. Stack (30)
  8. HTML5存储学习笔记(一)
  9. springMVC源码学习之:springMVC响应请求的几种方法
  10. JConsole是什么