Arrayutils.copylnsert(99, 2, nums, nums2);

      Комментарии к записи 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(Т e, uint idx,

T[] src, T[] target) {

Параметр типа объявляется после имени метода, но перед списком его параметров. Обратите также внимание на то, что метод Copylnsert () является статическим, что позволяет вызывать его независимо от любого объекта. Следует, однако, иметь в виду, что обобщенные методы могут быть либо статическими, либо нестатическими. В этом отношении для тшх не существует никаких ограничений.

Далее обратите внимание на то, что метод Copylnsert () вызывается в методе Main () с помощью обычного синтаксиса и без указания аргументов типа. Дело в том, что типы аргументов различаются автоматически, а тип Т соответственно подстраивается. Этот процесс называется выводимостью типов. Например, в первом вызове данного метода

ArrayUtils.Copylnsert (99, 2, nums, nums2);

тип T становится типом int, поскольку числовое значение 99 и элементы массивов nums и num2 относятся к типу int. А во втором вызове данного метода используются строковые типы, и поэтому тип Т заменяется типом string.

А теперь обратите внимание на приведенную ниже закомментированную строку кода.

// ArrayUtils.Copylnsert(0.01, 2, nums, nums2);

Если удалить символы комментария в начале этой строки кода и затем попытаться перекомпилировать программу, то будет получено сообщение об ошибке. Дело в том, что первый аргумент в данном вызове метода Copylnsert () относится к типу double, а третий и четвертый аргументы обозначают элементы массивов nums и nums2 типа int. Но все эти аргументы типа должны заменить один и тот же параметр типа Т, а это приведет к несоответствию типов и, как следствие, к ошибке во время компиляции. Подобная возможность соблюдать типовую безопасность относится к одним из самых главных преимуществ обобщенных методов.

Синтаксис объявления метода Copylnsert () может быть обобщен. Ниже приведена общая форма объявления обобщенного метода.

возвраща емый_ тип имя_метода (список_параметров) {// …

В любом случае список_параметров_типа обозначает разделяемый запятой список параметров типа. Обратите внимание на то, что в объявлении обобщенного метода список параметров типа следует после имени метода.

Вызов обобщенного метода с явно указанными аргументами типа

В большинстве случаев неявной выводимости типов оказывается достаточно для вызова обобщенного метода, тем не менее аргументы типа могут быть указаны явным образом. Для этого достаточно указать аргументы типа после имени метода при его вызове. В качестве примера ниже приведена строка кода, в которой метод Copylnsert () вызывается с явно указываемым аргументом типа string.

ArrayUtils.CopyInsert(В С#, 1, strs, strs2);

how to import org.apache.commons.lang3 in textpad