ArrayUtils.Copylnsert(99, 2, nums, nums2);
// Вывести содержимое массива nums2.
Console.Write('Содержимое массива nums2: '); foreach(int x in nums2)
Console.Write(x + ' ') ;
Console.WriteLine();
//А теперь обработать массив строк, используя метод copylnsert. string[] strs = {'Обобщения', 'весьма', 'эффективны.'}; string[] strs2 = new string[4];
// Вывести содержимое массива strs.
Console.Write('Содержимое массива strs: '); foreach(string s in strs)
Console.Write(s + ' ');
Console.WriteLine();
// Ввести элемент в массив строк.
ArrayUtils.Copylnsert('в С#', 1, strs, strs2);
// Вывести содержимое массива strs2.
Console.Write('Содержимое массива strs2: '); foreach(string s in strs2)
Console.Write(s + ' ');
Console.WriteLine();
// Этот вызов недопустим, поскольку первый аргумент // относится к типу double, а третий и четвертый // аргументы обозначают элементы массивов типа int.
// ArrayUtils.Copylnsert(0.01, 2, nums, nums2);
}
}
Вот к какому результату приводит выполнение этой программы.
Содержимое массива nums: 1 2 3 Содержимое массива nums2: 1 2 99.3
Содержимое массива strs: Обобщения весьма эффективны.
Содержимое массива strs2: Обобщения в C# весьма эффективны.
Внимательно проанализируем метод CopyInsert(). Прежде всего обратите внимание на объявление этого метода в следующей строке кода.
public static bool CopyInsert<T>(Т e, uint idx,
T[] src, T[] target) {
Параметр типа объявляется
Далее обратите внимание на то, что метод Copylnsert () вызывается в методе Main () с помощью обычного синтаксиса и без указания аргументов типа. Дело в том, что типы аргументов различаются автоматически, а тип Т соответственно подстраивается. Этот процесс называется
ArrayUtils.Copylnsert (99,
тип T становится типом int, поскольку числовое значение 99 и элементы массивов nums и num&2 относятся к типу int. А во втором вызове данного метода используются строковые типы, и поэтому тип Т заменяется типом string.
А теперь обратите внимание на приведенную ниже закомментированную строку кода.
// ArrayUtils.Copylnsert(0.01, 2, nums, nums2);
Если удалить символы комментария в начале этой строки кода и затем попытаться перекомпилировать программу, то будет получено сообщение об ошибке. Дело в том, что первый аргумент в данном вызове метода Copylnsert () относится к типу double, а третий и четвертый аргументы обозначают элементы массивов nums и nums2 типа int. Но все эти аргументы типа должны заменить один и тот же параметр типа Т, а это приведет к несоответствию типов и, как следствие, к ошибке во время компиляции. Подобная возможность соблюдать типовую безопасность относится к одним из самых главных преимуществ обобщенных методов.
Синтаксис объявления метода Copylnsert () может быть обобщен. Ниже приведена общая форма объявления обобщенного метода.
