// 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иnum&2относятся к типуint.А во втором вызове данного метода используются строковые типы, и поэтому типТзаменяется типомstring.

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

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

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

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

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

Перейти на страницу:

Похожие книги