Как вызвать метод в методе c. Методы в Си Шарп. Возврат из метода и возврат значения

Методы в Си Шарп | C#

Методы - это написанный код, который употребляется много раз (много раз вызывается). И для упрощения кода программы, использование метода очень важно. Метод - это новое слово в языке Си Шарп, старое слово - это функция.

Методы логичны, если данный код выполняется более 2-х раз. Тогда проще объявить имя метода, какие значения он принимает, и написать код, который бы выпонялся правильно при всех значениях, которые принимает метод.

Для того, чтобы объявить методы в C#, необходимо написать следующее:

ТИП_ВОЗВРАЩАЕМОГО_ЗНАЧЕНИЯ ИМЯ_ФУНКЦИИ (ПЕРЕМЕННЫЕ) { КОД_МЕТОДА }

Если вам не нужно что-то возвращать, то можно писать в ТИП_ВОЗВРАЩАЕМОГО_ЗНАЧЕНИЯ - void .

1. Функция не возвращающая значения и не принимающая аргументы:

void printError()
{
Console .Write("Error! Press Key..." );
Console .ReadKey();
}

2. Функция не возвращающая значения, но принимающая аргумент:

void printError(string s)
{
Console .Write("Error! " + s + "Press Key..." );
Console .ReadKey();
}

3. Функция не возвращающая значения, но принимающая аргументы:

void printError(string s, int i)
{
Console .Write("Error! " + s + " " + i + "Press Key..." );
Console .ReadKey();
}

3. Функция возвращающая значения, и принимающая аргументы:

char shifr(char x, int shifr)
{
x = (char )(x + shifr);
return x;
}

Вот пример программы, с применением методов: работа с методами ...

Также к методу можно устанавливать уровень защиты: private, public.

К примеру:

private char shifr(char x, int shifr)
{
x = (char )(x + shifr);
return x;
}

public char shifr(char x, int shifr)
{
x = (char )(x + shifr);
return x;
}

Использование и создание методов в программе на С# во многом схоже на уже известный вам подход из С++. Рассмотрим это поподробней. В C# любой метод является методом какого-либо класса. Например:

Using System; class Man{ public string name; public int age; public Man(string n,int a){ name = n; age = a; } public void Show(){ Console.WriteLine("Имя = "+name+"\tВозраст = "+age); } } class Sample { static void Main() { try{ Man obj = new Man("Fire",56); obj.Show(); } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

В данном примере у нас есть класс Man с методом Show и конструктором. Обратите внимание возле Show стоит спецификатор доступа public. Если его не указать по умолчанию будет поставлен private и вызвать его из класса Sample не получится. Для возврата значений и выхода из метода также как и в С++ используется оператор return. Принцип использования демонстрируется в примере:

Using System; class SomeClass{ public float x; public float y; public SomeClass(float a,float b){ x = a; y = b; } public float Summa(){ return x+y; } public void Test(float t){ if(t == 0){ Console.WriteLine("Для деления был передан 0"); return; } Console.WriteLine(" Результат = ",(x+y)/t); } } class Sample { static void Main() { try{ SomeClass obj = new SomeClass(2,3); Console.WriteLine("Сумма равна = "+obj.Summa()); obj.Test(0); } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

Передача параметров

В C# есть два способа передачи параметров методу по значению, и по ссылке. В первом случае внутрь метода попадает не оригинальная переменная. а её копия, которая разрушается при выходе из метода не оказывая влияния на оригинальную переменную. При передаче методу значений обычных типов, таких как int, double и т.д. используется передача по значению. Следовательно, при изменение параметра, никакого влияния на оригинальную переменную не происходит. Например:

Using System; class SomeClass{ public float x; public SomeClass(float a){ x = a; } public void TryToSetTo99(float res){ res = 99; } public float Mult(float res){ return res*x; } } class Sample { static void Main() { try{ SomeClass obj = new SomeClass(2); float test = 5; obj.TryToSetTo99(test); Console.WriteLine(test); // 5 Console.WriteLine(obj.Mult(test)); // 10 } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

Легко заметить, что переменная test не изменила своё значение после передачи её в TryToSetTo99.Теперь рассмотрим второй способ передачи параметров - по ссылке. В этом случае передается не копия переданного параметра, а ссылка на оригинальный объект, что позволяет модифицировать оригинал. По ссылке всегда автоматически передаются объекты классов. Например:

Using System; class SomeClass{ public int x; public int y; } class SomeClass2{ public void Set(SomeClass obj){ obj.x=1; obj.y=2; } } class Sample { static void Main() { try{ SomeClass obj = new SomeClass(); SomeClass2 obj2 = new SomeClass2(); obj.x = 8; obj.y = 9; obj2.Set(obj); // передаётся по ссылке Console.WriteLine(obj.x+" "+obj.y); // 1 2 } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

Как изменить значение для переменной типа int или double при передаче её внутрь метода будет показано в следующем разделе. В С#, как и в С++. можно перегружать методы. Правила при перегрузке такие же, как и в С++.

Статические методы

Статическим методом называется метод с модификатором static. Разница между обычным методом класса и таким состоит в том, что метод с static модификатором может быть вызван без создания какого-либо объекта класса. Например:

Using System; class Figure{ public static void Draw(){ Console.WriteLine("FigureDraw"); } } class Sample { static void Main() { try{ Figure.Draw(); } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

Отличия static - методов от обычных:

  1. Методы с модификатором static не имеют ссылки this.
  2. Метод с модификатором static, может непосредственно(без указания имени объекта) вызывать только другой статический метод.
  3. Метод с модификатором static имеет только прямой доступ к static - данным.
Например: using System; class Figure{ public int a; public void Line(){ Console.WriteLine("*************"); } public static void Draw(){ a = 78; // ОШИБКА!!! a не static - член Console.WriteLine("FigureDraw"); Line(); //// ОШИБКА!!! Line не static - метод } public static void Draw2(Figure t){ t.Line(); // А так можно!!! } } class Sample { static void Main() { try{ Figure.Draw(); Figure.Draw2(); } catch(Exception er){ Console.WriteLine(er.Message); } Console.Read(); } }

в 16 уроке мет рассказывал про классы, ну вот я продолжу эту тему.
Он объявлял переменные открытыми(public), вобще не рекомендуется объявлять их открытыми если с ними работают только методы. Эти переменные из любой части кода вызываются с помощью объектов класса. Ну вобще существует не только этот модификатор(public) есть еще 3: internal - переменные доступны в пределах 1 namespace, private - переменные доступны только в пределах класса и protected - почти такойже как и private, но только переменные доступны еще и классам наследникам. И про методы они также могут быть с такими же модификаторами(public, private и т.д) и могут возращать значение(int, double, bool и т.д) и если метод возращает значение у него должны быть параметры(то что у метода в скобках), они объявляются как переменные и разделяются запятыми и при вызове метода их указывают значения для них в порядке их объявления. И сделаем консольный калькулятор. Вот код:

Using System; //подключаем пространство имен class Program { /* * назначаем 2 закрытые переменные * типа double модификатор можно * не указывать т.к он по умол * чанию закрытый(private) */ double FN = 0.0; double SN = 0.0; public void SetFNandSN() //делаем открытый метод не возвращающий значение { Console.WriteLine(); Console.Write("Введите 1 число: "); FN = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите 2 число: "); SN = Convert.ToDouble(Console.ReadLine()); /* * вызываем метод SimpleCalculate * и не нужно создавать объект т.к * метод в этом же классе */ SimpleCalculate(); } void SimpleCalculate() //создаем закрытый метод т.к он вызывается только из этого класса { Console.WriteLine(); Console.WriteLine("Сумма: " + (FN + SN)); Console.WriteLine("Разность: " + (FN - SN)); Console.WriteLine("Частное: " + (FN / SN)); Console.WriteLine("Произведение: " + (FN * SN)); Console.WriteLine(); } } class DemoProgram { static int Main() { Program ob = new Program(); //создаем новый объект int intvar1 = 0; Console.WriteLine("Сколько раз производить вычисления?"); intvar1 = Convert.ToInt32(Console.ReadLine()); //конвертируем наш ответ в тип int for(int i = 0; i < intvar1; i++) { ob.SetFNandSN(); //вызываем метод } Console.ReadKey(); //ожидаем нажатия любой клавиши return 0; //возвращаем значение 0 т.к Main() должен возвращать значение int } }

И кстати возврат значений осуществляется с помощью ключевого слово return. Так же метод Main() как и другие методы может возвращать значение(я сделал это чтобы показать применения оператора return).