WEBYK WEBYK Індивідуальні OnLine уроки з web технологій
+38 093 766 39 11
oleggpann@gmail.com

Скрытие членов через явную реализацию интерфейса в C #

Явная реализация интерфейса - это сложный и редко используемый метод, который позволяет одному классу наследовать от нескольких интерфейсов, имеющих одинаковую сигнатуру метода. Явная реализация каждого интерфейса с добавлением имени метода к методу позволяет одной и той же сигнатуре метода существовать в одном и том же классе. Я не буду демонстрировать это здесь, но есть много примеров этого онлайн. Еще одно преимущество заключается в явной реализации интерфейса, а именно в том, чтобы скрыть доступ членов к элементам через ссылку на класс. Я создам пример этой техники, используя шаблон проектирования фабрики и класс Fruit, а также консольное приложение, через которое вы можете пройти через F11. Если вы создаете новое консольное приложение C # в Visual Studio, затем копируете и вставляете весь приведенный ниже код, вы можете выполнить (F11) код, чтобы увидеть, как он работает.using System;  namespace HidingMembersViaExplicitInterfaceImplementation {     public enum FruitType     {         Apple,         Orange,         Banana     }     public class Factory     {                 public static Fruit Create(FruitType type)         {             // the Factory class can modify the properties because it has access to             // the private IFruitSetters interface             var fruit = new Fruit();             ((IFruit)fruit).fruitType = type;             switch (type)             {                 case FruitType.Apple:                     ((IFruit)fruit).color = "Red";                     break;                 case FruitType.Banana:                     ((IFruit)fruit).color = "Yellow";                     break;                 case FruitType.Orange:                     ((IFruit)fruit).color = "Orange";                     break;             }             ((IFruit)fruit).DoOtherHiddenThings();             return fruit;         }                  // define a private interface containing the setters.         private interface IFruit         {             // define the setter in the private interface             string color { set; }             FruitType fruitType { set; }             void DoOtherHiddenThings();         }                  // This is the inner class. It has members color and fruitType that should not be modified         // by clients, but should be modified by the factory.                 public class Fruit : IFruit         {             private string pColor;             private FruitType pFruitType;             // explicitly implement the setters             string IFruit.color { set { pColor = value; } }             FruitType IFruit.fruitType { set { pFruitType = value; } }             void IFruit.DoOtherHiddenThings()             {                 //Does nothing.  Just showing how to hide methods too.             }               // create a public getters             public string Color { get { return pColor; } }             public FruitType FruitType { get { return pFruitType; } }         }     }     class Program     {         static void Main(string[] args)         {             Factory.Fruit apple = Factory.Create(FruitType.Apple);             // can only read color and fruitType because only the getter is public             // and IFruit is private to Factory             string fruitColor = apple.Color;             FruitType type = apple.FruitType;                     }     } }Сначала я вызываю фабричный метод Create и уточняю через перечислитель, какой тип фруктов мне нужно вернуть. Затем я устанавливаю скрытые свойства через явную реализацию интерфейса и даже вызываю аналогично скрытый метод, который ничего не делает. Интерфейс IFruit скрыт для клиента, является частным и доступен только из фабричного метода create. Это гарантирует, что я всегда получаю красное яблоко, желтый банан и оранжевый апельсин. Этот же метод можно использовать для создания собственных экземпляров классов в допустимом состоянии со значениями по умолчанию, а также для защиты членов, доступных только для чтения. Еще одно преимущество можно найти с помощью этого метода. Часто большие определения интерфейса вынуждают класс реализовывать методы, которые для наших целей не имеют логического смысла для нашего использования. Реализуя их явно, мы эффективно скрываем эти методы от видимого экземпляра открытого класса. Об авторе ... Ли МакГроу более 30 лет проработал в сфере технологий, сначала разрабатывая Apple II. Он работал в качестве разработчика и архитектора предприятия в таких организациях, как AIG, Ford, Coke, USAA, Министерство обороны и энергетики США и многие банки.

Теги

Разработка программного обеспечения C Реализация явного интерфейса на языке программирования Программирование в Visual Studio Скрытие членов в кодировании C Продолжить обсуждение
Источник: https://hackernoon.com/hiding-members-via-explicit-interface-implementation-in-c-2c5u3oc1

Якщо у вас виникли питання, вбо ви бажаєте записатися на індивідуальний урок, замовити статтю (інструкцію) або придбати відеоурок, пишіть нам на:
скайп: olegg.pann
telegram, viber - +380937663911
додавайтесь у телеграм-канал: t.me/webyk
email: oleggpann@gmail.com
ми у fb: www.facebook.com/webprograming24
Обов`язково оперативно відповімо на усі запитіння


Поділіться в соцмережах



Подобные статьи:


facebook
×
Підришіться на цікаві пости.
Підписатись