## Обобщённые интерфейсы Конечно же, основное преимущество обобщений — это способность определять обобщенные ссылочные и значимые типы. Но для CLR также исключительно важна поддержка обобщенных интерфейсов. Без них любая попытка работы со значимым типом через необобщенный интерфейс (например, IComparable) всякий раз будет приводить к необходимости упаковки и потере безопасности типов в процессе компиляции, что сильно сузило бы область применения обобщенных типов. Определение обобщенного интерфейса из библиотеки FCL (из пространства имен System.Collections.Generic) выглядит следующим образом:

public interface IEnumerator<T> : IDisposable, IEnumerator {
  T Current { get; }
}

Использование обобщённых интерфейсов очень удобно в случае, когда мы будем реализоваывать его в некотором классе, но с каким именно типом будет работать интерфейс, ещё не решили. Например, операция ADD. В случае типа Int32 нам нужно будет реализовать обобщённый интерефейс с этим типов так, чтобы числа складывались по правилам математики. Если же выбранный нами тип будет String, то в методе ADD реализуемого интерфейса, мы должны произвести конкатенацию строк. Пример:

interface IOperators<T> {
        T Add(T arg1, T arg2);
    }

    public class Ints: IOperators<int>{
        public int Add(int arg1, int arg2){
            return arg1 + arg2;
        }
    }

    public class Strings: IOperators<string>{
        public string Add(string s1, string s2){
            return s1 + s2;
        }
    }

    class Program{
        static void Main(string[] args){
            Console.WriteLine("-------Generic Interfaces----------");

            Strings strs = new Strings();
            Console.WriteLine(strs.Add("Ro", "man")); //Roman

            Ints ints = new Ints();
            Console.WriteLine(ints.Add(66, 3)); //69
            Console.ReadLine();
        }
    }

results matching ""

    No results matching ""