КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Параметры-значения
По ссылке По значению Способы обмена информацией При вызове метода выполняются следующие действия: 1. Вычисляются выражения, стоящие на месте аргументов 2. Выделяется память под параметры метода в соответствии с их типом 3. Каждому из параметров сопоставляется соответствующий аргумент 4. Выполняется тело метода 5. Если метод возвращает значение, оно передается в точку вызова. Если метод имеет тип void управление передается на оператор, следующий после вызова. Пример передачи параметров namespace ConsoleApplicationl { class Classl { int Max(int a, int b) // a,b- параметры метода, int-возвращаемое значение { if (a > b) return a; else return b; //возврат в точку вызова максимального из 2-х чисел } static void Main() { int a = 2, b = 4; int x = Max(a, b); //первый вызов метода с аргументами a,b Console.WriteLine(x); short t1 = 3, t2 = 4; int y = Max(t1, t2); //второй вызов метода Console.WriteLine(y); int z = Max(a + 3, 3 / 2 * 4); //третий вызов метода Console.WriteLine(z);} } } В приведенном примере описан метод Max, который выбирает наибольшее из двух переданных ему значений. Параметрами метода являются a и b. В основной программе метод Max вызывается три раза. В первый раз методу передаются два аргумента того же типа, что и параметры, во второй раз – аргументы совместимого типа, в троетий раз – выражение. Количество аргументов должно соотстветствовать количеству параметров. На имена никаких ограничений не накладывается - могут совпадать или не совпадать. Существует два способа передачи параметров: При передаче по значению метод получает копии аргументов, и операторы внутри метода работают с этими копиями. Доступа к исходным значениям аргументов у метода нет, и, следовательно, нет возможности их изменять. При передаче по ссылке (по адресу) метод получает адреса аргументов, осуществляет доступ к ячейкам памяти по этимадресам, следовательно может изменять значения аргументов, модифицируя параметры. В языке C# для обмена данными между вызывающей и вызываемой функциями есть 4 типа параметров: 1. параметры-значения 2. параметры-ссылки 3. выходные параметры 4. параметры-массивы Последний тип параметров (параметры-массивы) будут рассмотрены в дальнейших лекциях. Параметры-значения задаются в заголовке метода обычным образом, например: void func(int x) В данном примере параметр х – это параметр-значение, который предсталяет собой локальную переменную, которая получает свое значение при вызове метода func. В метод передается копия значения аргумента для х. Параметры-ссылки Во многих методах все величины, которые метод должен получить в качетстве исходных данных,описываются в списке перемтров, а величина, которую вычислет метод как результат своей работы, возвращается в вызывающий код с помощью оператора return. Если метод должен возвращать более,чем одно значение, такой способ не годится. Также, если в методе требуется изменить значение передаваемых в него величин используются параметры –ссылки. Параметры-ссылки задаются в заголовке метода с использованием ключевого слова ref, например: void func(ref int x) При вызове такого метода параметр копирует не значение аргумента для х, а его адрес, поэтому внутри метода значение переданного параметра изменяется. Пример применения параметров-значений и параметров-ссылок namespace ConsoleApplication2 { class Program { static void p(int a, ref int b)//обратите внимание на слово static! { a = 44; b = 33; Console.WriteLine("внутри метода {0} {1}", a, b); } static void Main(string[] args) { int a = 2, b = 4; Console.WriteLine("до вызова метода {0} {1}", a, b); p(a, ref b);//обратите внимание на ВЫЗОВ метода Console.WriteLine("после вызова метода {0} {1}", a, b); Console.ReadKey(); } }} Если в методы передаются объекты (экземпляры классов), то есть величины не значимых, а ссылочных типов, то эти объекты всегда передаются по ссылке!
Дата добавления: 2014-01-20; Просмотров: 435; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |