深入理解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为动态类型,编译器允许我们对产品列表迭代打印,但是它不确保是否能执行成功。如果有错误,只有执行时才会知道失败。