亲密接触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
&gt; p.WorkingSet)
            .Take(10);

解决办法:小于号"<"替换成"&lt",大于号">"替换成"&gt"。即.OrderByDescending(p => p.WorkingSet)

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[11].Value = "Process Name"// no casts; Value dynamically  
15        excel.Cells[12].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[11];       // 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”的引用。

posted @ 2009-11-10 23:50  风影极光  阅读(446)  评论(0编辑  收藏  举报