深入理解C#(五)

*第一章(大致了解C#各个版本的特性:COM和动态类型)

C# 4特性:互操作性

包括:处理旧的COM技术和在DLR(Dynamic Language Runtime,动态语言运行时)上执行全新动态语言。

简化COM互操作

用COM控制让数据出现在Excel中
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var app = new Application { Visible = false };
Workbook workbook = app.Workbooks.Add();
Worksheet worksheet = app.ActiveSheet;
int row = 1;
foreach (var product in Product.GetSampleProducts()
.Where(p => p.Price != null))
{
worksheet.Cells[row, 1].Value = product.Name;
worksheet.Cells[row, 2].Value = product.Price;
row++;
}
workbook.SaveAs(Filename: "demo.xls",
FileFormat: XlFileFormat.xlWorkbookNormal);
app.Application.Quit();

与动态语言互操作

问题:产品能通过WEb服务访问,但只能用Python代码。Web服务使用了Python特性来构建结果,没有声明我们要访问的属性类型。但要我们指定类型,怎么办?

使用新的类型dynamic

可以将dynamic类型隐式转换为其他类型

例子:从IronPython中获取产品列表并打印出来。

1
2
3
4
5
6
7
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.ExecuteFile(@"CSharp4\FindProducts.py");
dynamic products = scope.GetVariable("products");
foreach (dynamic product in products)
{
Console.WriteLine("{0}: {1}", product.ProductName, product.Price);
}

products和product为动态类型,编译器允许我们对产品列表迭代打印,但是它不确保是否能执行成功。如果有错误,只有执行时才会知道失败。