动态关键字没有intellisense?

时间:2010-09-16 13:09:13

标签: c# com silverlight-4.0

我正在阅读Silverlight 4 in Action并同时尝试其中的示例。但是,我似乎无法理解新的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);
            }

我想知道作者是如何知道形状支持AddChart方法的,以及他如何知道他需要传递给这个函数的参数?有人可以对此有所了解吗?

提前致谢:)

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

使用动态对象,您只需调用一个方法,输入一些参数,如果存在该签名的确切方法,DLR将调用它。

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

答案 2 :(得分:0)

“方法以及他如何知道他需要传递给这个函数的参数?”

他可能编码或阅读文档。