程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c# 4.0新特性一覽(4)

c# 4.0新特性一覽(4)

編輯:關於C語言

4.0中在聲明generic的Interface及Delegate時可以加in及out關鍵字,如:

public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
public interface IEnumerator<out T> : IEnumerator
{
bool MoveNext();
T Current { get; }
}

public interface IComparer<in T>
{
public int Compare(T left, T right);
}

out關鍵字的意思是說IEnumerable<T>中T只會被用在輸出中,值不會被改變。這樣將 IEnumerable<string>轉為IEnumerable<object>類型就是安全的。

in的意思正好相反,是說IComparer<T>中的T只會被用在輸入中,這樣就可以將 IComparer<object>安全的轉為IComparer<string>類型。

前者被稱為Co-Variance, 後者就是Contra-Variance。

.Net4.0中使用out/in聲明的Interface:

System.Collections.Generic.IEnumerable<out T>
System.Collections.Generic.IEnumerator<out T>
System.Linq.IQueryable<out T>
System.Collections.Generic.IComparer<in T>
System.Collections.Generic.IEqualityComparer<in T>
System.IComparable<in T>

Delegate:

System.Func<in T, …, out R>
System.Action<in T, …>
System.Predicate<in T>
System.Comparison<in T>
System.EventHandler<in T>

Compiler as a Service

4.0中增加了與編譯器相關的API,這樣就可以將字符串作為代碼動態編譯執行,跟Javascript好像。

Video的最後,Anders做了一個很酷的demo,大概只用了二三十行代碼,就實現了在控制台中直接執行 C#語句,定義並調用函數,動態創建Windows form,添加button等功能,看起來完全不遜色於Python, Ruby之類語言的控制台。

沉寂了n年之後,CLR終於要出新版本了,這回Jeffrey Richter大俠沒有借口不出新版的CLR via C#了 吧:)

Reference:

視頻: http://channel9.msdn.com/pdc2008/TL16/

PPT:http://mschnlnine.vo.llnwd.Net/d1/pdc08/PPTX/TL16.PPTx

示例代碼及文檔(New features in C# 4.0):http://code.msdn.microsoft.com/csharpfuture

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved