Similar presentations:
Процедурное программирование. Методы. Подтема 2.2.5
1.
Подтема 2.2.5 Процедурное программирование.Методы
• Метод представляет собой блок кода, содержащий набор
инструкций. Программа инициирует выполнение
операторов, вызывая метод и задавая необходимые
аргументы метода. В C# все инструкции выполняются в
контексте метода. Метод Main является точкой входа для
каждого приложения C#, и вызывается он средой CLR при
запуске программы.
• В C# все методы принадлежат к классу. В отличие от языков
программирования, таких как C, C++ и Visual Basic , которые
позволяют глобальные подпрограммы и функции.
• Параметры заключаются в круглые скобки и разделяются
запятыми. Пустые скобки указывают на то, что у метода нет
параметров.
2.
Main – это методТот же синтаксис используется для определения собственных методов
using System;
class ExampleClass
{
static void ExampleMethod( )
{
Console.WriteLine("Example method");
}
static void Main( )
{
// ...
}
}
3.
• Код на слайде содержит три метода:• Метод Main
• Метод Main является точкой входа приложения.
• Метод WriteLine
• Метод WriteLine является частью Microsoft ®.NET Framework.
Метод WriteLine — статический метод класса
System.Console.
• Метод ExampleMethod
• Метод ExampleMethod принадлежит ExampleClass. Этот
метод вызывает метод WriteLine.
4.
При создании метода, необходимо указать следующее:Имя
Вы не можете дать методу то же имя, которое объявлено в
классе у переменной, константы или другого метода.
Имя метода может быть любой допустимый идентификатор
C#, и он чувствителен к регистру.
Список параметров
После имени метода следует список параметров для метода.
Он заключается в скобки. Необходимо задать скобки, даже
если нет параметров.
Тело метода
После скобок пишется тело метода. Необходимо заключить
тело метода в фигурные скобки ({и}), даже если есть только
один оператор.
5.
• Модификаторы доступа public, protected, internal или privateиспользуются для указания одного из следующих объявленных
уровней доступности:
• public
Неограниченный доступ.
• protected Доступ ограничен содержащим классом или
типами, которые являются производными от содержащего
класса.
• internal
Доступ ограничен текущей сборкой.
• protected internal Доступ ограничен текущей сборкой или
типами, которые являются производными от содержащего
класса.
• private
Доступ ограничен содержащим типом.
• Методы public, доступны извне
• Данные private, доступны только изнутри
6.
• После определения метода, вы можете:• Вызывать метод в пределах того же класса
• Использовать имя метода, а затем в круглых скобках
указывать список параметров
• Вызывать метод, который находится в другом классе
• Вы должны указать компилятору, какой класс содержит
метод для вызова, вызываемый метод должен быть
объявлен с помощью зарезервированного слова public
• Можно использовать вложенные вызовы
MethodName( );
ClassName.MethodName( );
7.
class A{
public static void TestMethod( )
{
// private static void TestMethod( );
Console.WriteLine("This is TestMethod in class A");
}
}
static void Main( )
{
A.TestMethod( );
}
8.
Использование оператора return• Если вы хотите немедленно вернуться к вызывающему
объекту, используйте оператор return.
• По умолчанию метод заканчивается при достижении
последней инструкции в блоке кода.
static void ExampleMethod( )
{
int numBeans;
//...
Console.WriteLine("Hello");
if (numBeans < 10)
return;
Console.WriteLine("World");
}
9.
Локальные переменныеСоздаются, когда метод начинается
Private в методе
Уничтожаются после выхода
Каждый метод имеет свой собственный набор
локальных переменных. Можно использовать эти
переменные только внутри метода, в котором они
объявлены. Локальные переменные не доступны из
других мест.
Общие переменные
Переменные класса используются для обмена
Сфера конфликтов
Компилятор не будет предупреждать если локальные и
имена классов конфликтуют
10.
• Для возврата переменных объявите метод с типом non-void• Добавьте оператор return с выражением, задающим
возвращаемое значение
• Добавьте возврат в вызывающую переменную
• Non-void методы должны возвращать значение
class ExampleReturningValue
{ static int TwoPlusTwo( )
{
int a,b;
a = 2;
b = 2;
return a + b;
}
static void Main( )
{
int x;
x = TwoPlusTwo( );
Console.WriteLine(x);
}
}
11.
• Объявление параметров– Между скобок после имени метода
– Определяется имя и тип каждого параметра
• Вызов метода с параметрами
– Указывается значение каждого параметра
static void MethodWithParameters(int n, string y)
{ ... }
MethodWithParameters(2, "Hello, world");
int p = 7;
string s = "Test message";
MethodWithParameters(p, s);
12.
Механизмы для передачи параметров• Три способа передачи параметров
in
Передача по значению
in
out
Передача по ссылке
out
Выходные параметры
13.
• По умолчанию механизм для передачи параметров:– Значение параметра копируется
– Переменная может быть изменена в методе
– Не влияет на значение вне метода
– Параметр должен быть того же типа или совместимого
типа
static void AddOne(int x)
{
x++; // Increment x – не возвращается
}
static void Main( )
{
int k = 6;
AddOne(k);
Console.WriteLine(k); // Отобразит значение 6, а не 7
}
14.
Что такое параметры ссылок?Ссылочный параметр — ссылка на ячейку памяти. В
отличие от значения параметра параметр ссылки не
создает новое место хранения. Вместо этого параметр
ссылки представляет одно расположение в памяти как
переменная, которая поставляется в вызове метода.
Использование параметров ссылок
Используйте ключевое слово ref в объявлении метода
и вызова
Сопоставление типов параметров и значений
Изменения, сделанные в методе влияют на
вызывающие значения
Назначьте значение параметров до вызова метода
15.
Сопоставление типов параметров и значений• Параметр ссылки можно объявить с помощью ключевого
слова ref перед именем типа:
• При вызове метода, задании параметров ссылки, используйте
ключевое слово ref, за которым следует переменная.
Значение, указанное в вызове метода должно точно
соответствовать типу в описании метода, и он должен быть
переменной, не константой или вычисляемым выражением.
static void ShowReference(ref int nId, ref long nCount)
{
// ...
}
int x;
long q;
ShowReference(ref x, ref q);
16.
• Если в методе изменится значение параметра ссылки,переменная также изменяется, потому что обе ссылки на
одно место в памяти.
static void AddOne(ref int x)
{
x++;
}
static void Main( )
{
int k = 6;
AddOne(ref k);
Console.WriteLine(k); // Выдается значение 7
}
17.
• Параметр ref должен быть окончательно назначен в местесовершения вызова; то есть компилятор должен обеспечить
присваивание значения перед вызовом метода:
static void AddOne(ref int x)
{
x++;
}
static void Main( )
{
int k = 6;
AddOne(ref k);
Console.WriteLine(k); // 7
}
static void AddOne(ref int x)
{
x++;
}
static void Main( )
{
int k;
AddOne(ref k);
Console.WriteLine(k); // Ошибка
}
18.
• Выходные параметры, как ссылочные параметры, заисключением того, что они передают данные из метода, а не в
него. Как и параметр ссылки выходной параметр является
ссылкой на место хранения данных от вызывающего объекта.
Однако переменной с параметром out не нужно присваивать
значение перед вызовом.
• Выходные параметры полезны, когда вы хотите иметь
возможность возвращать значения из метода посредством
использования параметра без присвоения начального
значение параметра.
• Для выходных параметров используйте ключевое слово out в
объявлении метода и вызове. Выходному параметру должно
быть присвоено значение внутри метода.
static void OutDemo(out int p)
{
// p определяется внутри метода...
}
int n;
OutDemo(out n);
19.
Руководящие принципы для передачи параметров• Механизмы
– Передача по значению является наиболее
распространенной
– Метод возвращаемого значения полезен для одиночных
значений
– Использовать ref или out нужно для нескольких
возвращаемых значений
– Используйте ref, только если оба способа передают
данные
• Эффективность
– Передача по значению является как правило, наиболее
эффективной