| C#: Зачем нужна Explicit Interface Implementation? Хорошая иллюстрация. |
[Nov. 18th, 2010|02:58 pm] |
Если коротко, Explicit Interface Implementation - это синтаксическая конструкция C#, которая позволяет разрешить конфликт имен методов при наследовании от разных интерфейсов, в которых есть методы с одинаковой сигнатурой. К имени метода просто добавляется префикс с именем интерфейса. Например:
interface IOne{ void Foo(int count); }
interface ITwo {void Foo(int count);}
class A : IOne, ITwo { public void Foo(int count){} void ITwo.Foo(int count){} //Explicit Interface Implementation }
Модификатор доступа у метода с Explicit Interface Implementation опускается, вызов такого метода возможен только через переменную имеющую тип данного интерфейса.
Разумеется, если все интерфейсы и классы могут быть изменены в процессе разработки лучше избегать конфликта имен. Однако даже в FCL(она же BCL) есть примеры когда имена методов пересекаются. Рассмотрим тип IEnumerable<T>: поскольку IEnumerable<T> наследуется от IEnumerable мы имеем два экземпляра метода GetEnumerator():
1) IEnumerator GetEnumerator() 2) IEnumerator <T> GetEnumerator().
GetEnumerator() - супер важный метод, именно он вызывается в начале цикла foreach. А теперь, внимание, вопрос - какой из 2-х GetEnumerator() будет вызван из foreach? Ответ лучше всего получить экспериментальным путем - создать наследника IEnumerable<T>. Для простоты эксперимента лучше всего агрегировать и обернуть какой-нибудь стандартный класс-коллекцию и обратиться к экземпляру нашего класса из forech. В результате выясняется, что будет вызван метод, который не использует Explicit Interface Implementation. Отсюда следует, что следующий код не очень хорошая идея: IEnumerator<T> IEnumerable<T>.GetEnumerator(){...} public IEnumerator GetEnumerator(){...}
В данном случае будет вызван не generic метод - в следствии имеем все прелести boxing/unboxing. Если оба GetEnumerator() сделать с Explicit Interface Implementation будет вызван generic метод. Этот факт нужно учитывать при написании собственных коллекций. |
|
|
| More Than A Feeling |
[Jul. 5th, 2010|11:22 pm] |
Посмотрел The Men Who Stare at Goats(в переводе "Безумный спецназ") понравилось, еще понравилась песня More Than A Feeling испоняемая ВИА "Boston"
|
|
|
| Free XML editor with XPath support, ORM(извините наболело) |
[Feb. 26th, 2010|02:01 pm] |
Exchanger XML Lite V3.2 (с незамысловатым адресом http://www.freexmleditor.com/) Не понимаю, почему MSFT до сих пор не встроил поддержку XPath в Visual Studio при поиске/навигации.
Да, кстати, LINQ to XML сосет, XPAth - рулит. Тo что на XPath пишется в одну строку на LINQ выгдяит каким-то громоздким чудовищем. LINQ to SQL тоже сосет, а SQL cоответственно рулит. Никакое удобство не компенсирует потерю производительности в 2 порядка. Возможно я не умею готовить кошек, тогда где же удобство и простота использования? Выкручивание рук ORM-у сопостовимо с затратами по кодированию без ORM, только во втором случае процесс более детерминированный. Для средних и крупных систем с интентсивным обменом данных ORM не годится. Да, N-Hibernate гораздо круче - тормозит всего лишь в 2-3 раза. Мы тут у себя используем автогенерацию Table gates/Entities(Code Smith) + доморощенную библиотеку data access(возможно dewfy захочет рассказать больше) - тоже маппинг на Table gates/Entities через атрибуты. Почти не тормозит, самое слабое место многократное чтение единичных записей(типичный сценарий для web) - дает себя знать доступ к полям SqlDataReader по имени, а не поиндексу.
LINQ to Objects рулит, да. |
|
|
| Download in Chrome after crash |
[Feb. 26th, 2010|11:56 am] |
Разбалованный хорошим инетом я уже и забыл о таком пережитке как даунлоад-менеджер. Тупо качаю Хромом, он иногда падает, так вот, после того как он запускается после креша - даунлоады отваливаются, более того, повторная закачка скачивает файл не полностью. Таким образом я наконец-то узнал что Free Download Manager поддерживает Хром(Options->Settings->Downloads->Monitoring->Google Chrome check box)
ЗЫ: криво интегрированно, с файлообменников ссылки не подхватывает(пошел ставить оперу) |
|
|
| Бесплатный aудио конвертер |
[Feb. 25th, 2010|02:11 pm] |
После непродолжительных поисков остановил пока свой выбор на Bonk Enc. "Пока" потому как BonkEnc не открывает некоторые FLAC файлы. Использовал до недавнего времени Jet Audio(3х летней давности), мало того что он платный, так еще иногда осыпается при конвертации FLAC. |
|
|
| Тормоза при записи DVD |
[Feb. 25th, 2010|01:50 pm] |
Почему тормозит система(Windows XP SP3) при записи DVD(CD не пробовал), особенно в начале и в конце записи?Использую бесплатные AstroBurn(плавные тормоза все время записи с пиками в начале и в конце) и СВ Burner XP(резкие тормоза вначале и в конце). Или может дело в приводе(LG hl-dt-dvdram gh22ns50)? Так совпало что я начал пользоваться бесплатными писалками на новом компе на работе. Вопрос не совсем праздный - собираюсь поменять дома комп, соответственно нужно выбрать не тормозящий привод. |
|
|
| navigation |
| [ |
viewing |
| |
most recent entries |
] |
| [ |
go |
| |
earlier |
] |
| |
|
|