C# 动态关键字没有智能感知?
我正在阅读《行动中的Silverlight 4》,同时也在尝试其中的例子。然而,我似乎无法理解新的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
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将是另一种方法。