Нет смысла для динамического ключевого слова? - PullRequest
2 голосов
/ 16 сентября 2010

Я читаю 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 ]

5 голосов
/ 16 сентября 2010

Это не нужно для COM. Однако код, который не использует dynamic, представляет собой настоящий беспорядок.

Относительно того, как автор знал, какие методы доступны, он прочитал документацию по Excel VBA. Просмотр библиотеки типов Excel также покажет вам сигнатуры методов, но без объяснения.

3 голосов
/ 16 сентября 2010

Динамический в основном означает, что вы не знаете во время компиляции, какой тип у вас будет (или иногда этот тип еще даже не существует). Отсюда и отсутствие интеллигенции.

С динамическим объектом вы просто вызываете метод, добавляете некоторые параметры, и если этот точный метод с такой сигнатурой существует, DLR будет вызывать его.

Если он не существует, вы получите исключение времени выполнения.

0 голосов
/ 16 сентября 2010

"метод и как он узнал, какие параметры ему нужно передать этой функции?"

Он, вероятно, закодировал это или прочитал документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...