c# 2.0 到3.5新特性

一、C# 2.0 新特性:

1、泛型
List<MyObject> obj_list=new List<MyObject>();
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<T>數據源.
在ORM解決方案中,LINQ對象用途很大.
示例:
List<Customer> customers = new List<Customer>();
IEnumerable<Customer> 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<int>();
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<Person>{    //集合初始化器
  new Person{Name="TEW",Age=21},
  new Person{Name="RSA",Age=18}
};

6、從 C# 不同版本看使用代理的不同代碼(C# 3.0/3.5 寬鬆委託)
C# 1.0/1.1:
public class MyForm10
{
    System.Windows.Forms.ListBox lb = new System.Windows.Forms.ListBox();
    System.Windows.Forms.TextBox tb = new System.Windows.Forms.TextBox();
    System.Windows.Forms.Button bt = new System.Windows.Forms.Button();
    public MyForm10()
    {
        bt.Click += new EventHandler(bt_Click);
    }

    void bt_Click(object sender, EventArgs e)
    {
        lb.Items.Add(tb.Text);
    }
}

C# 2.0:
public class MyForm20
{
    System.Windows.Forms.ListBox lb = new System.Windows.Forms.ListBox();
    System.Windows.Forms.TextBox tb = new System.Windows.Forms.TextBox();
    System.Windows.Forms.Button bt = new System.Windows.Forms.Button();
    public MyForm20()
    {
        bt.Click += delegate {
            lb.Items.Add(tb.Text);
        };
    }
}

C# 3.0/3.5(寬鬆委託):
public class MyForm30
{
    System.Windows.Forms.ListBox lb = new System.Windows.Forms.ListBox();
    System.Windows.Forms.TextBox tb = new System.Windows.Forms.TextBox();
    System.Windows.Forms.Button bt = new System.Windows.Forms.Button();
    public MyForm30()
    {
        //bt.Click =>{lb.Items.Add(tb.Text);}; //還沒搞懂
    }
}

7、匿名類型
var aa1=new{ID=12,Name="Tang",IsHello=false};
Console.Write(aa1.Name);
var aa2=new{ID=25,Name="Sing",IsHello=true}
aa1=aa2;

8、隱式類型化數組

9、分部方法(partial分部類的分部方法,必須是void返回類型)
// 文件 1.cs
public partial class A{
    void B(); //聲明
}

// 文件 2.cs
public partial class A{
    void B { Console.WriteLine("B invoked."); } //實現
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章