Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Обмен данными между методами




При рассмотрении данного вопроса взаимодействие между методами упрощено – рассматриваем вариант, когда все методы расположены в одном классе.

Существует 3 способа обмена данными:

1. Использование общих полей класса (рассмотренный ранее вариант)

2. Обмен данными через параметры методов

3. Возврат данных из метода

 

Обмен данными через параметры методов

При вызове метода в скобках помещаются фактические параметры (аргументы метода), которые передаются в метод и там обрабатываются. При определении метода (в его заголовке) указываются формальные параметры, для каждого параметра указывается тип и имя. Значения аргументов будут подставлены вместо параметров (попарно, слева направо). Аргументом может быть любое выражение, тип которого совпадает с типом параметра или может быть автоматически преобразован к типу параметра. При вызове метода вместо формальных параметров его заголовка подставляются фактические. Это похоже на подстановку конкретных чисел в формулу. Сейчас мы рассмотрим ВСЕ виды параметров. На данном этапе не ставится задача изучить перечисляемые способы передачи данных в полном объеме. Это справочная информация.

Виды параметров:

1. Входные (прием данных) – при вызове снимается копия аргумента и передается в метод на место параметра. Метод не имеет возможности изменить аргумент. По умолчанию все параметры считаются входными.

2. Выходные – при вызове в метод передается ссылка на область памяти, где хранится аргумент. Метод обрабатывает данные по этой ссылке, т.е. работает с оригиналом аргумента. Выходные параметры при определении метода и вызове метода должны иметь модификатор out.

3. Входные - выходные – по механизму реализации аналогичны выходным параметрам, но вызывающий метод в обязательном порядке должен определить значение метода. Выходные параметры при определении метода и вызове метода должны иметь модификатор ref.

На практике школьнику достаточно освоить передачу переменных и констант по значению и массивов по ссылке.

Почему передача массивов производится о ссылке? Ссылка – это адрес ячейки памяти, куда помещается первый элемент массива с индексом 0. Массивы, как вы уже знаете, располагаются в памяти в непрерывной области (в подряд идущих ячейках). Поэтому нам достаточно знать адрес начала массива, а потом индексировать его, смещаясь на длину одного элемента внутри выделенной памяти. Нет нужды передавать в метод все элементы массива. Иногда мы называем имя массива ссылкой на его начало в памяти ЭВМ.

Переменные и константы передаются как правило по значению. В стеке копируется их значение и используется методом. А первоначальное значение остается неизменным. Можно их передавать и о ссылке (т.е. не само значение, а адрес ячейки памяти). Для передачи адреса и служат ref и out. Не всегда стоит допускать метод «хозяйничать» в ячейках, поэтому основным способом передачи данных в метод остается передача по значению.

Пример:

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

class_Example

{

Public_static_void_Mov (ref int x, ref int y, int d)

{

x=x+d;

y=y+d;

}

 

public_static_void_Main()

{

int a=4, b=3, d=10;

Move (ref a, ref b, d);

}

}

В примере метод не возвращает значение, в него по ссылке передаются две переменные и одна по значению. Переменные меняют значение в результате вычислений внутри метода. Так как они переданы по ссылке, то замена старого значения переменных на новое производится в ячейке памяти. Исходные данные теряются. А теперь попробуйте добавить оператор вывода на экран переменных после вызова метода. Вы получите значения 14 и 13 соответственно вместо 4 и 3.

Теперь рассмотрим ту же программу, но с передачей данных по значению.

class_Example

{





Поделиться с друзьями:


Дата добавления: 2017-03-12; Мы поможем в написании ваших работ!; просмотров: 197 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Вы никогда не пересечете океан, если не наберетесь мужества потерять берег из виду. © Христофор Колумб
==> читать все изречения...

2282 - | 2104 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.