我正在阅读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
方法的,以及他如何知道他需要传递给这个函数的参数?有人可以对此有所了解吗?
提前致谢:)
答案 0 :(得分:5)
COM不需要它。但是,不使用dynamic
的代码实在是一团糟。
关于作者如何知道可用的方法,他阅读了Excel VBA文档。查看Excel类型库也会告诉您方法签名,但没有解释。
答案 1 :(得分:3)
动态基本上意味着你在编译时不知道你将拥有什么类型(或者有时类型甚至不存在)。因此没有智能感知。
使用动态对象,您只需调用一个方法,输入一些参数,如果存在该签名的确切方法,DLR将调用它。
如果它不存在,您将获得运行时异常。
答案 2 :(得分:0)
“方法以及他如何知道他需要传递给这个函数的参数?”
他可能编码或阅读文档。