亲密接触C# 4.0
花了两个晚上,终于看完了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类型的项目
完整的代码:
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
22 excel.Cells[i, 2].Value = p.WorkingSet; // no casts
23 i++;
24 }
25 Excel.Range range = excel.Cells[1, 1]; // no casts
26 Excel.Chart chart = excel.ActiveWorkbook.Charts.
27 Add(After: excel.ActiveSheet); // named and optional arguments
28 chart.ChartWizard(
29 Source: range.CurrentRegion,
30 Title: "Memory Usage in " + Environment.MachineName); //named+optional
31 chart.ChartStyle = 45;
32 chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
33 Excel.XlCopyPictureFormat.xlBitmap,
34 Excel.XlPictureAppearance.xlScreen);
35 var word = new Word.Application();
36 word.Visible = true;
37 word.Documents.Add(); // optional arguments
38 word.Selection.Paste();
39 }
40 }
41}
3.2 添加引用
在COM标签中添加“Microsoft Excel 11.0 Object Library”的引用。