Покажите мне, как использовать новое "динамическое" ключевое слово в C # 4.0 - PullRequest
4 голосов
/ 19 ноября 2008

Вот новое будущее C # в версии 4.0, известное как динамическое. Покажите мне, как я могу использовать его в своем коде и как это будущее может помочь мне?


Похожие вопросы:

Ответы [ 4 ]

3 голосов
/ 12 февраля 2010

Мы используем ключевое слово "dynamic" в C # с TDD.

Этот код не компилируется, потому что метод "Добавление" не реализован

[TestMethod()]
public void CalculatorThingAdd_2PositiveNumbers_ResultAdded()
{
    CalculatorThing myCalculator = new CalculatorThing();
    int result = 0; 
    int expcected = 3;

    // --> CalculatorThing  does not contain a definition for 'Addition'
    result = myCalculator.Addition(1, 2);

    Assert.AreEqual(result, expcected);
}

При использовании ключевого слова "dynamic" код компилируется и тест не пройден! -> TDD

Смотрите ответ здесь https://stackoverflow.com/questions/244302/what-do-you-think-of-the-new-c-4-0-dynamic-keyword/2243818#2243818

3 голосов
/ 19 ноября 2008

Андерс Хейлсберг провел замечательную сессию PDC под названием "Будущее C #" есть довольно хорошая демонстрация использования динамического ключевого слова:

http://channel9.msdn.com/pdc2008/TL16/

3 голосов
/ 13 декабря 2008

Как только у вас есть динамический объект, компилятор меньше всего беспокоится о вызовах любых методов, которые вы можете сделать с динамическим объектом. Звонки будут разрешены только во время выполнения. В этом случае метод Read () отправляется динамически во время выполнения.

Что еще более красиво, C # теперь дает вам гибкость, позволяющую указать, как следует отправлять динамические вызовы. Вы можете реализовать IDynamicObject, чтобы написать эти связыватели самостоятельно. Например, посмотрите, как я создаю класс динамического считывателя, который позволяет вам вызывать ваши собственные методы для экземпляра этого.

public class DynamicReader : IDynamicObject
    {
        public MetaObject GetMetaObject
              (System.Linq.Expressions.Expression parameter)
        {
            return new DynamicReaderDispatch (parameter);
        }
    }

    public class DynamicReaderDispatch : MetaObject
    {
        public DynamicReaderDispatch (Expression parameter) 
                   : base(parameter, Restrictions.Empty){ }

        public override MetaObject Call(CallAction action, MetaObject[] args)
        {
            //You might implement logic for dynamic method calls. Action.name
            // will give you the method name

            Console.WriteLine("Logic to dispatch Method '{0}'", action.Name);
            return this;
        }
    }

Теперь ключевое слово dynamic можно использовать для создания динамических объектов, аналогично

dynamic reader=new DynamicReader();
dynamic data=reader.Read();
2 голосов
/ 19 ноября 2008

Одним из применений является взаимодействие между статическими и динамическими языками.

Допустим, вы хотите вызвать функцию JavaScript для Silverlight:

HtmlPage.Window.Invoke("HelloWorldFunction");

Если бы окно было динамичным (и правильно реализованным), вы могли бы использовать его следующим образом:

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