Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зачёт С#.docx
Скачиваний:
17
Добавлен:
10.12.2018
Размер:
100.55 Кб
Скачать

18. Определение методов класса. Модификаторы доступа к методам класса. Параметры методов класса, передача аргументов.

Определение методов класса. Метод – это набор действий, который рассматривается как единое целое и может быть выполнен в ходе работы программы. В C# не существует глобальных методов. Любой метод обязательно должен быть членом класса или структуры. Методы могут принимать или не принимать параметры, могут возвращать или не возвращать значения, могут быть статическими (например, методы класса Math) или методами экземпляров.

Модификаторы доступа к методам класса (access modifiers) служат для задания степени "видимости", или доступности данного члена для кода, лежащего за пределами его собственного класса. В C# существуют следующие модификаторы доступа к методам класса:

рublic (общий) – общедоступный метод, доступен вне определения класса и иерархии производных классов;

private (частный, закрытый) – метод недоступен за пределами области видимости определяющего его класса. Поэтому доступа к этим методам нет даже у производных классов. По умолчанию установлен модификатор доступа private. Рrivate-методы применяют при создании класса как вспомогательные методы;

protected (защищенный) – метод будет доступен как из класса, в котором он определён , так и из любого производного класса. Для остальных вызовов из внешнего мира этот метод будет недоступен;

internal (внутренний)– метод будет доступен из всех классов внутри сборки, в которой он определён. За пределами этой сборки обратиться к нему невозможно;

protected internal – для обеспечения дополнительной гибкости; к члену класса могут иметь доступ либо классы из той же сборки, либо подклассы данного класса.

Как происходит передача аргументов (фактических параметров) методу класса (формальным параметрам)?

Рассмотрим строку кода T1. Set_x_y(15, 25). Здесь значения аргументов 15 и 25 копируются в формальные параметры метода. А это значит, что изменения, внесенные в параметры метода при работе метода, (например x=x*10; y=y*10), не влияют на аргументы, используемые при вызове:

public void Set_x_y (double x, double y)

{

х *=10;

y *=10;

this.x=x;

this.y=y;

}

В Main() вызовем этот метод, но предварительно введем значения аргументов с клавиатуры:

double x, y;

Console.WriteLine(“Введите новые значения координат тoчки”);

x=Double.Parse(Console.ReadLine());

y=Double.Parse(Console.ReadLine());

// Пусть введены числа -5,432 и 2,7655.

T1. Set_x_y(x, y);

T1.show();

Console.WriteLine(“х={0:0.###}, y={1:0.### }”, х, у);

// Выполнить приложение и проанализировать!

Первый способ передачи аргумента называется вызовом по значению (call-by-value). Вывод: При передаче методу значения структурного типа происходит вызов по значению.

Рассмотрим строки кода:

if (T1. Rawni_li(T2)) …

и

T1.copy (T2);

Здесь для получения доступа к реальному аргументу, заданному при вызове (объект T2), используется ссылка (T2) на аргумент. Второй способ передачи аргумента называется вызовом по ссылке (cale-by-reference). Это значит, что изменения, внесенные в параметр при работе метода (например, ob.x=ob.x+100;), воздействуют на аргумент, используемый при вызове метода:

public void copy (Point ob)

{

ob.x +=100;

ob.y +=100;

x = ob.x;

y = ob.y;

}

В Main() вызовем этот метод:

T1.show();

T2.show();

T1.copy (T2);

T1.show();

T2.show(); // Выполнить приложение!

Почему так происходит? T2 – это ссылка на объект. При передаче ее методу, параметр Point ob получит эту ссылку (строго говоря, по значению, ссылка копируется) и будет ссылаться на тот же объект, что и аргумент T2.

Вывод: Объекты передаются методу путем вызова по ссылке.