неявная и явная реализация интерфейса [дубликат]
Возможные Дубликаты:
C#: интерфейсы-неявная и явная реализация
кто-нибудь объяснит различия между этими двумя животными и как их использовать. Насколько мне известно, многие заранее.Классы 2.0 были реализованы без универсальных типов, что привело к тому, что последняя версия реализовала оба варианта интерфейсов. Это единственный случай, почему нужно было бы использовать их?
можете ли вы также объяснить, как использовать их.?
спасибо
3 ответа:
есть хороший и довольно подробный блог об этом.
в основном с неявной реализацией интерфейса вы получаете доступ к методам и свойствам интерфейса, как если бы они были частью класса. С явными реализациями интерфейса вы можете получить к ним доступ только при обработке его как этого интерфейса.
с точки зрения того, когда вы будете использовать один над другим, иногда вам нужно использовать явную реализацию интерфейса, поскольку у вас есть свойство / метод с той же сигнатурой, что и интерфейс, или вы хотите реализовать два интерфейса с одинаковыми сигнатурами и иметь разные реализации для тех свойств/методов, которые соответствуют.
ниже правила от Брэда Абрамса руководство по дизайну блог.
- не используйте явные члены в качестве границы безопасности. Они могут быть вызваны любым клиентом, который приводит экземпляр к интерфейсу.
- используйте явные члены, чтобы скрыть реализацию подробности
- используйте явные члены для аппроксимации реализаций частного интерфейса.
- предоставьте альтернативный способ доступа к любым явно реализованным членам, которые подклассы могут переопределять. Используйте то же имя метода, если не возникнет конфликт.
в комментариях в блоге Брэда также упоминается, что при использовании явной реализации типов значений используется бокс, поэтому имейте в виду стоимость производительности.
Имплицитная Реализация Интерфейса
public class MyClass : InterfaceOne, InterfaceTwo { public void InterfaceMethod() { Console.WriteLine("Which interface method is this?"); } } interface InterfaceOne { void InterfaceMethod(); } interface InterfaceTwo { void InterfaceMethod(); }
Явный Интерфейс Реализация
public class MyClass : InterfaceOne, InterfaceTwo { void InterfaceOne.InterfaceMethod() { Console.WriteLine("Which interface method is this?"); } void InterfaceTwo.InterfaceMethod() { Console.WriteLine("Which interface method is this?"); } } interface InterfaceOne { void InterfaceMethod(); } interface InterfaceTwo { void InterfaceMethod(); }
по ссылке есть отличное видео, объясняющее эту концепцию
Явная Реализация Интерфейса
есть еще один способ взглянуть на это, из самой лабиринтной реализации, здесь:http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx.
но короче говоря, неявная реализация дает вам преобразование типа is-a, явная реализация не будет доступна, если объект не будет явно приведен к этому типу интерфейса.