花了兩個晚上,終於看完了New features in CSharp 4.0.docx。最大的感觸是動態語言編程和COM的互操作性上游很大的變化。前者將是C#具備python和ruby的語言特性,後者將更好支持office編程。
很多地方都沒有看的很明白,需要進一步深入的學習。我會不定期更新此文章。
第一個主題:最大的變化是具備了動態語言的特征。
重點有以下幾個方面:
Ø 動態編程語言對象
Ø 通過IDispatch來獲取COM對象
Ø 通過反射獲取.Net類型
Ø 對象結構的變化,類似於HTML DOM對象
C#在保留靜態語言的同時,更好的實現對象的交互。
第二個主題:與VB保持共同進化。
C#4.0新特性
動態查詢
被命名的和可選參數
COM特定的互操作特性
靈活性
動態查詢
動態類型
動態操作符
運行時查詢
COM對象
動態對象
普通對象
過度的解析動態參數
動態語言運行時
當前進度6頁
現存問題
不能使用LINQ來查詢動態對象。由於lambda不能作為參數傳遞給動態操作。
指定參數和任意參數
COM互操作特性
動態引用
NO PIAS 編譯
這個功能將提高代碼的編譯效率,減少程序集加載做占用的內存。可參考張羿的webcast<<.NET 4.0中的新特性系列課程(1):等價類型(Type Equivalency)(>>
略去ref
逆變
Func<object,string> 可以這樣用: Func<string,object>.
局限
IEnumerable<int>不等同於 IEnumerable<object>。因為從整型轉換為對象是裝箱操作,而不是引用變換。
三 文檔最後的實例
我從word檔拷貝到VS2010 BETA2上代碼出現的問題:
var processes = Process.GetProcesses()
.OrderByDescending(p > p.WorkingSet)
.Take(10);
解決辦法:小於號"<
3.1 新建console類型的項目
完整的代碼:
1using System;
2using System.Diagnostics;
3using System.Linq;
4using Excel = Microsoft.Office.Interop.Excel;
5using Word = Microsoft.Office.Interop.Word;
6namespace ConsoleApplication1
7{
8 class Program
9 {
10 static void Main(string[] args) {
11 var excel = new Excel.Application();
12 excel.Visible = true;
13 excel.Workbooks.Add(); // optional arguments omitted
14 excel.Cells[1, 1].Value = "Process Name"; // no casts; Value dynamically
15 excel.Cells[1, 2].Value = "Memory Usage"; // accessed
16 var processes = Process.GetProcesses()
17 .OrderByDescending(p => p.WorkingSet)
18 .Take(10);
19 int i = 2;
20 foreach (var p in processes) {
21 excel.Cells[i, 1].Value = p.ProcessName; // no casts