zoukankan      html  css  js  c++  java
  • 【转】c#2.0 3.0 3.5 4.0新特性

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


     -----------------------------------------------------------

    那我们看看.NET Framework 4.0功能又给我们带来了什么?

    .NET Framework 4与 Framework 3.5 SP1并行工作。在旧版的Framework中可以运行的应用程序,将继续能够运行在.NET Framework 4上。

    在Visual Basic和C #语言中有所创新,例如声明lambdas 、隐线continuations 、动态调度、并命名/可选参数等。

    在ADO.NET实体框架中增加了许多新的功能,通过提高抽象层次,从而简化开发人员的关系数据库的程序。这些新功能包括:持续忽略、POCO支持、延迟加载,测试驱动开发的支持、功能模型以及新的LINQ运营商等。

    .NET Framework 4.0功能一、以下是ASP.NET中的改进 :

    改进JavaScript用户界面模板和AJAX中的数据绑定功能;

    改进ASP.NET的图表控制;

    .NET Framework 4.0功能二、以下是WPF中的改进:

    在WPF中增加Windows 7多触控、ribbon控制、任务栏扩展功能支持;

    在WPF中增加Surface 2.0 SDK支持;

    新的业务线控制,包括图表控制,智能编辑,数据网格,以及其他能够提高“建立数据中心的应用程序”的开发者经验的控制。

    提高性能和可扩展性;

    在文字、像素布局、本地化和互操作性中添加可视化改进;

    .NET Framework 4.0功能三、Windows Workflow(WF)中的改进让开发者能够更好地控制工作流程,具体改进如下:

    改善活动规划模型;

    改进设计体验;

    一个新的流程建模方式;

    扩大调色板的活动范围;

    工作流程规则一体化;

    新邮件相关的功能。

    .NET Framework 4.0功能四、.NET框架还为基于WF的工作流程提供重大的性能改进:

    改进Windows通讯基础( WCF )构架,例如流服务相关支持,双向通信的持久性等。

    .NET框架4还提供了新的WCF功能,例如服务发现、路由器服务、简化配置、REST支持、诊断和性能提升等。

     

  • 相关阅读:
    Airodump-ng——Description
    kali 2.0 — WIFI——commands
    国外整理的一套在线渗透测试资源合集
    A collection of android security related resources.
    cBPM
    cBPM-android
    CentOS7 安装 gcc-4.9.0
    install Android Studio 1.3 —— VM Acceleration on Linux
    08嵌入式—蔺小会—初创公司需要怎样的管理模式?
    Nodejs开发框架Express4.x开发手记
  • 原文地址:https://www.cnblogs.com/xinyuxin912/p/2185098.html
Copyright © 2011-2022 走看看