Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1071 of 1492 menu
◀ ▶

Явная реализация интерфейса

Член помечают как ИмяИнтерфейса.ИмяЧлена без модификатора public. Снаружи класса такой метод виден только при приведении к интерфейсу. Это удобно, когда одинаковые сигнатуры нужны у нескольких контрактов или их надо скрыть от клиента класса.

Синтаксис

тип IContract.Метод(параметры) { // тело }

Пример

Давайте вызовем метод через переменную интерфейса:

using System; interface IShow { string Show(); } class Holder : IShow { string IShow.Show() { return "abcde"; } } class Program { static void Main() { IShow item = new Holder(); Console.WriteLine(item.Show()); } }

Результат выполнения кода:

"abcde"

Пример

Давайте сравним публичный и явный метод с одним именем:

using System; interface IValue { int GetValue(); } class Cell : IValue { public int GetValue() { return 1; } int IValue.GetValue() { return 2; } } class Program { static void Main() { var cell = new Cell(); IValue via = cell; Console.WriteLine(cell.GetValue() + " " + via.GetValue()); } }

Результат выполнения кода:

1 2

Пример

Давайте реализуем два интерфейса с разным поведением:

using System; interface IFirst { string Read(); } interface ISecond { string Read(); } class Dual : IFirst, ISecond { string IFirst.Read() { return "12345"; } string ISecond.Read() { return "abcde"; } } class Program { static void Main() { IFirst a = new Dual(); ISecond b = new Dual(); Console.WriteLine(a.Read() + " " + b.Read()); } }

Результат выполнения кода:

12345 abcde

Смотрите также

  • реализация интерфейса,
    которая задаёт контракт для класса
  • new,
    который скрывает одноимённый член базы
  • as,
    который безопасно приводит к интерфейсу
  • private,
    который ограничивает доступ к члену класса
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить