2010-09-16 80 views
2

我在阅读Silverlight 4 in Action并同时尝试使用示例。但是,我似乎无法理解新的dynamic关键字,为什么它需要COM。这是我的代码: -对于动态关键字没有intellisense?

if (AutomationFactory.IsAvailable) 
      { 
       dynamic excel = 
       AutomationFactory.CreateObject("Excel.Application"); 
       excel.Visible = true; 
       dynamic workbook = excel.workbooks; 
       workbook.Add(); 
       dynamic sheet = excel.ActiveSheet; 
       int i = 1; 
       double[] data = new double[] { 1.0, 5.0, 9.5, 2.7, 3.2, 0.6 }; 
       foreach (double d in data) 
       { 
        dynamic cell = sheet.Cells[i, 1]; 
        cell.Value = "Row " + i; 
        cell.ColumnWidth = 10; 
        cell = sheet.Cells[i, 2]; 
        cell.Value = d; 
        i++; 
       } 
       dynamic shapes = sheet.Shapes; 
       shapes.AddChart(-4100, 120, 2, 300, 200); 
      } 

我想知道如何做了笔者来到知道,形状支持AddChart方法和他怎么知道哪些参数,他需要传递给这个功能呢?有人可以对此有所了解吗?

在此先感谢:)

+1

作者可能RTFM。然后再次写入代码,首先添加Microsoft.Office.Interop.Excel引用,然后编辑它以使用* dynamic *将是另一种方法。 – 2010-09-16 13:36:56

回答

5

COM不需要它。但是,不使用dynamic的代码真是一团糟。

至于作者如何知道有什么方法可用,他阅读了Excel VBA文档。查看Excel类型库也会告诉你方法签名,但没有解释。

0

“的方法和他怎么知道哪些参数,他需要传递给这个功能吗?”

他可能编码或阅读文档。

3

动态基本意味着你不知道在编译时你将使用什么类型(或者有时类型甚至不存在)。因此缺乏智能感知。

对于动态对象,您只需调用一个方法,引入一些参数,并且如果具有该签名的精确方法存在,DLR将会调用它。

如果它不存在,你会得到一个运行时异常。