Как только у вас есть динамический объект, компилятор меньше всего беспокоится о вызовах любых методов, которые вы можете сделать с динамическим объектом. Звонки будут разрешены только во время выполнения. В этом случае метод 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();