| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Причины явной реализации членов интерфейса |
| Автор: mastermedia 21.1.2012, 23:31 | ||
Шилдт описывает две причины явной реализации членов интерфейсов, но мне не понятна одна из них. Вот, что он пишет: когда интерфейсный метод реализуется с указанием его полного имени, то такой метод оказывается доступным не посредством объектов класса, реализующего данный интерфейс, а по интерфейсной ссылке. Следовательно, явная реализация позволяет реализовать интерфейсный метод таким образом, чтобы он не стал открытым членом класса, предоставляющего его реализацию. Мне не понятно смысл описанного и причина когда это нужно использовать и зачем. В книге приводится следующий пример, я пометил комментарии что мне не понятно также в коде:
|
| Автор: ShavarRsh 22.1.2012, 16:37 |
| При явной реализации функцию можно вызвать только через интерфейс. Это нужно в ситуации, когда мы реализум 2 интерфейса с одинаковой функцией. И вызывающий код должен явно указать реализацию какого интерфейса надо использовать. Допустим есть второй интерфейс IEven2 у которого тоже есть функция bool IsEven(int x); class MyClass : IEven, IEven2 { bool IEven.IsOdd(int x) { if((x%2) != 0) return true; else return false; } bool IEven2.IsOdd(int x) { Console.WriteLine("IEven2 is called"); if((x%2) != 0) return true; else return false; } // Normal implementation. public bool IsEven(int x) { IEven o = this; //объясните данный участок кода return !o.IsOdd(x); } } и теперь только клиент этого класса должен решить какую из реализаций он хочет вызвать: IEven iRef = (IEven) ob; result = iRef.IsOdd(3);// вызовется IEven.IsOdd IEven2 iRef = (IEven2) ob; result = iRef.IsOdd(3);// вызовется IEven2.IsOdd (которая напишет строчку в консоль) |
| Автор: jonie 25.1.2012, 21:40 |
| а я еще пример видел например в Dictionary<T> - он скрывает методы ICollection<T> неудобные : такие как Add(KeyValuePair<K,V> item) Они неудобны, т.к. есть идентичные им методы IDictioary<T> Add(K key, V value) и раздувают видимый интерфейс при использовании Dictionary<K,V> явным образом... |