. Этому типу принадлежат аргументы метода и локальная переменная temp. Всякий раз при вызове метода ему, наряду с фактическими аргументами, будет передаваться и фактический тип, заменяющий тип T в описании метода. О некоторых деталях технологии подстановки и выполнения метода поговорим в конце лекции, сейчас же лишь отмечу, что реализация вызова универсального метода в C# не приводит к существенным накладным расходам. Рассмотрим тестирующую процедуру из традиционного для наших примеров класса Testing, в которой интенсивно используется вызов метода swap для различных типов переменных: public void TestSwap() { int x1 = 5, x2 = 7; Console.WriteLine("до обмена: x1={0}, x2={1}",x1, x2); Change.Swap<int>(ref x1, ref x2); Console.WriteLine("после обмена: x1={0}, x2={1}", x1, x2); string s1 = "Савл", s2 = "Павел"; Console.WriteLine("до обмена: s1={0}, s2={1}", s1, s2); Change.Swap<string>(ref s1, ref s2); Console.WriteLine("после обмена: s1={0}, s2={1}", s1, s2); Person pers1 = new Person("Савлов", 25, 1500); Person pers2 = new Person("Павлов", 35, 2100); Console.WriteLine("до обмена: "); pers1.PrintPerson(); pers2.PrintPerson(); Change.Swap<Person>(ref pers1, ref pers2); Console.WriteLine("после обмена:"); pers1.PrintPerson(); pers2.PrintPerson(); } Обратите внимание на строки, осуществляющие вызов метода: Change.Swap<int>(ref x1, ref x2); Change.Swap<string>(ref s1, ref s2); Change.Swap<Person>(ref pers1, ref pers2); В момент вызова метода передаются фактические аргументы и фактические типы. В данном примере в качестве фактических типов использовались встроенные типы int и string и тип Person, определенный пользователем. Общая ситуация такова: если в классе объявлен универсальный метод со списком параметров M<T1, ...Tn> (...) |