понедельник, 26 сентября 2011 г.

Проблема extension-методов с типом dynamic

"Динамический тип" появился в .NET 4.0. Суть его состоит в привязывании методов не на уровне компиляции, а на уровне исполнения. Почитать про него можно к примеру тут http://habrahabr.ru/blogs/net/43773/

Но ужасное открытие меня ожидало при разработке библиотеки с использованием типов dynamic. "Расширительные" методы на нем не только не работают, но даже не выдают ошибки. Точнее, генерируют исключение уже во время работы.

Хотя такое поведение логично (тип-то динамический), в коде оно создает дикую путаницу, особенно при рефакторинге. Выхода три:
1. Не использовать extension методы
2. Не использовать dynamic типы
3. Терпеть как есть, сохранять бдительность и качественно тестировать код. Как вариант - можно вызывать методы расширения как обычные статические методы для dynamic:

dynamic dynamicObject = new object();
object obj = new object();

// вызов расширения для object
obj.ExtensionMethod();

// вызов расширения для dynamic
ObjectExtensions.ExtensionMethod(dynamicObject);

Если писать так - то все работает. Но профита в методах расширения уже нет

Комментариев нет:

Отправить комментарий