C# 动态关键字没有智能感知?

C# 动态关键字没有智能感知?,c#,com,silverlight-4.0,C#,Com,Silverlight 4.0,我正在阅读《行动中的Silverlight 4》,同时也在尝试其中的例子。然而,我似乎无法理解新的dynamic关键字,以及COM为什么需要它。这是我的代码:- if (AutomationFactory.IsAvailable) { dynamic excel = AutomationFactory.CreateObject("Excel.Application"); ex

我正在阅读《行动中的Silverlight 4》,同时也在尝试其中的例子。然而,我似乎无法理解新的
dynamic
关键字,以及
COM
为什么需要它。这是我的代码:-

 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);
            }
我想知道作者是如何知道shapes支持
AddChart
方法的,以及他是如何知道需要将哪些参数传递给这个函数的?有人能解释一下吗


提前感谢:)

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

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

“方法以及他如何知道需要将哪些参数传递给此函数?”


他可能是把它编了码或是读了文件

动态基本上意味着您在编译时不知道将拥有什么类型(或者有时该类型甚至还不存在)。因此,智能感知的缺失

对于动态对象,您只需调用一个方法,插入一些参数,如果具有该签名的确切方法存在,则将调用它


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

作者可能是RTFM。另外,编写代码时先添加Microsoft.Office.Interop.Excel引用,然后编辑它以使用dynamic将是另一种方法。