На этом шаге мы рассмотрим небольшой пример использования обобщенных методов.
Небольшой пример, в котором объявляется и используется статический обобщенный метод, представлен в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr253_1 { // Класс с целочисленным полем: class MyClass { // Целочисленное поле: public int code; // Конструктор: public MyClass(int n) { code=n; } // Переопределение метода ToString(): public override string ToString() { return "поле = " + code; } // Операторный метод для преобразования объекта к // целочисленному типу: public static implicit operator int(MyClass obj) { return obj.code; } // Операторный метод для преобразования целого числа // в объект: public static implicit operator MyClass(int n) { return new MyClass(n); } } // Класс с главным методом: class Program { // Обобщенный метод (с аргументом обобщенного типа): static void show<T>(T arg) { // Обобщенный параметр: Console.WriteLine("Обобщенный параметр: {0}", typeof(T).Name); // Значение аргумента: Console.WriteLine("Значение аргумента: {0}", arg); Console.WriteLine(" "); } // Главный метод: static void Main() { // Вызов обобщенных методов: show(100); show<int>(200); show<double>(300); show<MyClass>(400); show('A'); show<char>('B'); show<int>('C'); show("Alpha"); MyClass obj = new MyClass(500); // Создание объекта show(obj); show<int>(obj); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы представлен ниже:
Рис.1. Результат работы приложения
В этой программе мы описываем самый обычный класс MyClass, объект которого мы планируем передавать статическому обобщенному методу. В классе описано целочисленное поле code, его значение определяется аргументом конструктора. Метод ToString() переопределен для класса так, что результатом возвращается текстовая строка со значением поля code. Еще в классе определены два операторных метода. Один определяет способ неявного преобразования объекта в целое число (в этом случае результатом является значение поля code объекта), а другой метод определят способ преобразования целого числа в объект (результатом операции является ссылка на вновь созданный объект, а значение поля code объекта определяется исходным целочисленным значением).
В классе с главным методом описан обобщенный статический метод show(). У метода один обобщенный параметр (обозначен как T). При вызове метода в консольном окне отображаются значение обобщенного параметра и значение аргумента. Значение обобщенного параметра определяется инструкцией typeof(T).Name.
В главном методе программы метод show() вызывается с несколькими аргументами, в том числе и с аргументом, являющимся объектом класса MyClass (при отображении значения аргумента, когда аргументом является объект класса MyClass, вызывается метод ToString()). Например, при выполнении команды
show(100);
show<int>(200);
show<double>(300);
show<MyClass>(400); ,
Команды
show('A');
show<char>('B');
show<int>('C');
При выполнении команды
show("Alpha");
show(obj);
show<int>(obj);
На следующем шаге мы продолжим изучение этого вопроса.