Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 54

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 48 49 50 51 52 53 < 54 > 55 56 57 58 59 60 .. 320 >> Следующая

116 Глава 2 • Основы языка С#
Вначалемьшроиллюстрируемнапримереприменениемодификаторовіп^ подразумеваемое, и out — явное. Ниже приведена версия метода Acid С}, который возвращает суммудвух целочисленных чисел С#, используя ключевое слово out:
// Значения исходящим - out - паранегран присваиваются вшивавши методом
public void Add(int х. int у, out int ans)
{
ans = x + у:
}
Вызов метода с исходящими параметрами также требует применения ключевого слова out. Например:
//Предположи*, что аггел ШО определен в классе с и*екеіч Methods public static void MainO
{
Methods = new Methods():
int ans; И Исходное значение присваивать не обязательно - значение вскоре
// присвоит вызываемый метод
// Обратите внинание на использование ключевого слова out в синтаксисе // вызова метода
m.AddOO. 90, out ans);
Console. WM teLine( "90 + 90 = {O)". ans):
}
Как можно убедиться, эта версия метода ftcd О работает так же, как и классическая:
public int Add (int x. int y) I
return X + y;
}
Параметры, передаваемые по ссылке (с использованием модификатора обычно применяютсядля того, чтобы метод внес изменения в существующие значения. В качестве примера можно привести процедуры сортировки. Обратите вни-
Таблица 2.9. Модификаторы параметров С# Модификатор Назначение
(нет) Если параметр никак не помечен, то по умолчанию считается, что этот
параметр — входящий (для передачи методу), передаваемый как значение, Вместо пропуска модификатора можно использовать модификатор in — результат будет тем же самым
out Аналогично атрибуту [out] в IDL: исходящий параметр, который возвращается
вызванным методом вызывающему
Аналогично атрибуту [in, out] в IDL исходное значение присваивается вызывающим методом, но оно может быть изменено вызванным. При этом происходит передача параметра по ссылке
params Этот модификатор позволяет передавать целый набор параметров как единое
целое. В любом методе может быть только один модификатор params, и параметр с этим модификатором может быть только последним параметром в списке параметров метода. Можно сказать, что это — примерный аналог
_SAFEARRAY в СОМ_
Статические методы и методы экземпляров 117
мание на различия между исходящими (out) параметрами и параметрами,
даваемыми по ссылке (ref):
• Исходящие параметры перед передачей вызываемому методуїішгдшілизі;-ровать не обязательно. Причина очевидна — о присвоении значения этому параметру должен позаботиться вызываемый метод.
• Параметры, передаваемые по ссылке, обязательно должны быть инициализированы перед передачей вызываемому методу. Причина также очевидна: вы передаете ссылку на существующий тип. Если вы еще не присвоили начальное значение, то это все равно, что передавать пустой указатель!
Проиллюстрируем применение ключевого слова ref на примере:
// Метод принимает параметр, передаваемый по ссылке public void UpperCaseThisStringtref string s)
Il Возвращаем символьную строку, в которой все буквы станут заглавными s = s.ToUpperQ;
}
// Вызываем этот метод через Mann О
public static void MainO
{
Il Испопьэуем ключевое слово ref
string s = "Can you really have sonic hearing for $19.00?"; Console. WriteLi net "Before: {0}". s);
m.UpperCaseThisStringfref s) Console.WriteLine("After: {0}". s);
}
Последний модификатор, который мы рассмотрели, - это модификатор рагапн. Этот модификатор используется для передачи набора параметров (в неопределенном количестве) как одного параметра. Для того чтобы вы не запутались, представляя себе этот механизм, разберем его на примере. Представим, что в нашем распоряжении есть следующий метод:
// Метол принимает два физических параметра
public void DisplayArrayDfInts(string msg, params int[] 11st)
(
Console.WriteLine(msg):
for (int i=0; і < list.Length; 1++) Console.Wri teL і ne(1 і st[і]);
}
Этот метод объявлен таким образом, что он принимает только два физических параметра: один — типа string, а второй — как параметризованный массив значений типа int. Можно считать, что этот метод предлагает вам: «Дайте мне символьную строку как первый параметр и любое количество целых чисел как второй». Вы можете вызвать этот метод любым из следующих способов:
// Передави значения методу, объявленному с модификатором params 1nt[] intArray= new int[3] {10.11.12}: m.DisplayArrayQflnts ("Here is an array of ints", IntArray): m.DisplayArrayOflnts ("Enjoy these 3 ints". 1, 2, 3): m.DisplayArrayOflnts ("Take some more!", 55. 4, 983. 10432, 98, 33):
118 Глава 2 Основы языка С#
Console. WriteLine(list[i]);
}
tonsolе.WriteLlпес):
}
Вызов этого метода может выглядеть следующим образом:
// Вначале создаем объект класса Person Person р - new Person ("Fred". 93);
im. Di s pi ayArrrayOf Objects (777. p. "I really am an instance of System.String"); Результат работы программы с вызовом данного метода представлен на рис. 2,\':к
Изучив приведенный код, можно заметить, что выделенные элементы в любом из вариантов соответствуют второму параметру метода0;р ayAr'' ay О: I Конечно же, вы не обязаны использовать с ключевым словом pa rams исключительно простейшие целочисленные значения. Предположим, что класс Pe rs on в этотраз определен следующим образом:
Предыдущая << 1 .. 48 49 50 51 52 53 < 54 > 55 56 57 58 59 60 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100