Шаг 161.
Язык программирования C#. Начала.
Абстрактные классы и интерфейсы. Явная реализация членов интерфейса

    На этом шаге мы рассмотрим простейший пример такой реализации.

    Если класс реализует несколько интерфейсов, то может сложиться ситуация, когда в нескольких интерфейсах объявлен один и тот же метод, свойство или индексатор. В таком случае в классе, реализующем интерфейсы, достаточно один раз описать соответствующий член. В следующем примере класс реализует два интерфейса, которые содержат объявление одинаковых методов. Код упрощен, чтобы легче было понять суть. Программа представлена ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr161_1
{
    // Первый интерфейс: 
    interface First { 
        void show();
    }

    // Второй интерфейс: 
    interface Second { 
        void show();
    }

    // Класс реализует интерфейсы: 
    class MyClass: First, Second {
        // Описание метода: 
        public void show() {
            Console.WriteLine("Объект класса MyClass");
        }
    }

    // Класс с главным методом: 
    class Program
    {
        // Главный метод: 
        static void Main()
        {
            // Создание объекта:
            MyClass obj = new MyClass();
            // Ссылка на объект записывается 
            // в интерфейсные переменные:
            First A = obj;
            Second B = obj;
            // Вызовы метода через разные переменные: 
            obj.show();
            A.show();
            B.show();
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Ниже представлен результат выполнения программы:


Рис.1. Результат выполнения программы

    В программе описаны интерфейсы First и Second, в каждом из которых объявлен метод show() без аргументов, не возвращающий результат. Класс MyClass реализует оба эти интерфейса, но метод show() в классе описан только один раз (при вызове метод выводит сообщение в консоль). В главном методе программы создается объект класса MyClass и в три переменные (объектная obj класса MyClass, интерфейсная A типа First и интерфейсная переменная B типа Second) записывается ссылка на него. Затем через каждую из трех переменных вызывается метод show(). Вполне ожидаемо результат во всех трех случаях один и тот же.


Если бы в рассмотренном примере кроме интерфейсов First и Second был еще и абстрактный базовый класс Base, в котором объявлен абстрактный метод show(), то ситуация разрешалась бы похожим образом. В классе MyClass, наследующем класс Base и реализующем интерфейсы First и Second, следовало бы описать метод show(), но в описании метода необходимо использовать ключевое слово override.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг