- •5. Обзор встроенных типов данных в с#. Применение встроенной функциональности типов данных.
- •6. Пространство имён System. Класс System.Math
- •7.Операции ввода-вывода. Формат вывода.
- •8. Арифметические операции. Операции отношений и логические операции. Операторы и выражения в c# .
- •Операторы
- •9.Массивы в с#. Одномерные массивы.
- •10.Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.
- •11. Двумерныемассивы в c#. Виды двумерных массивов и способы их определения. Способы создания двумерных массивов. Вывод матриц на экран по строкам.
- •12. Структуры в c#. Создание структур. Массивы структур.
- •13.Объект и его свойства. Характеристики ооп.
- •14.Определение классов в c#. Члены класса. Форма определения класса.
- •15.Конструкторы. Параметризованные конструкторы. Создание экземпляра класса. Использование оператора new.
- •16. Типы значений и ссылочные типы. Динамическое использование памяти: стеки и кучи. Упаковка и распаковка.
- •18. Определение методов класса. Модификаторы доступа к методам класса. Параметры методов класса, передача аргументов.
- •19. Модификаторы ref, out, params параметров методов.
- •20.Возвращение методами объектов класса. Возвращение методами массивов Возвращение методами объектов класса
- •Возвращение методами массивов
- •21. Общие (статические) члены класса. Доступ к общим членам. Ограничения на static-методы.
- •22.Цикл «Жизни». Область видимости и время существования переменных.
- •23. Преобразование и приведение типов данных.
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.
Вывод: Объекты передаются методу путем вызова по ссылке.