Создание методов в c#. Методы классов. Возврат из метода и возврат значения

в 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).

Методы

Следует отметить, что официальная терминология C# делает различие между функциями и методами. Согласно этой терминологии, понятие "функция-член" включает не только методы, но также другие члены, не являющиеся данными, класса или структуры. Сюда входят индексаторы, операции, конструкторы, деструкторы, а также - возможно, несколько неожиданно - свойства. Они контрастируют с данными-членами: полями, константами и событиями.

Объявление методов

В C# определение метода состоит из любых модификаторов (таких как спецификация доступности), типа возвращаемого значения, за которым следует имя метода, затем список аргументов в круглых скобках и далее - тело метода в фигурных скобках:

[модификаторы] тип_возврата ИмяМетода([параметры]) { // Тело метода }

Каждый параметр состоит из имени типа параметра и имени, по которому к нему можно обратиться в теле метода. Вдобавок, если метод возвращает значение, то для указания точки выхода должен использоваться оператор возврата return вместе с возвращаемым значением.

Если метод не возвращает ничего, то в качестве типа возврата указывается void , поскольку вообще опустить тип возврата невозможно. Если же он не принимает аргументов, то все равно после имени метода должны присутствовать пустые круглые скобки. При этом включать в тело метода оператор возврата не обязательно - метод возвращает управление автоматически по достижении закрывающей фигурной скобки.

Возврат из метода и возврат значения

В целом, возврат из метода может произойти при двух условиях. Во-первых, когда встречается фигурная скобка, закрывающая тело метода. И во-вторых, когда выполняется оператор return . Имеются две формы оператора return: одна - для методов типа void (возврат из метода ), т.е. тех методов, которые не возвращают значения, а другая - для методов, возвращающих конкретные значения (возврат значения ).

Давайте рассмотрим пример:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class MyMathOperation { public double r; public string s; // Возвращает площадь круга public double sqrCircle() { return Math.PI * r * r; } // Возвращает длину окружности public double longCircle() { return 2 * Math.PI * r; } public void writeResult() { Console.WriteLine("Вычислить площадь или длину? s/l:"); s = Console.ReadLine(); s = s.ToLower(); if (s == "s") { Console.WriteLine("Площадь круга равна {0:#.###}",sqrCircle()); return; } else if (s == "l") { Console.WriteLine("Длина окружности равна {0:#.##}",longCircle()); return; } else { Console.WriteLine("Вы ввели не тот символ"); } } } class Program { static void Main(string args) { Console.WriteLine("Введите радиус: "); string radius = Console.ReadLine(); MyMathOperation newOperation = new MyMathOperation { r = double.Parse(radius) }; newOperation.writeResult(); Console.ReadLine(); } } }

Использование параметров

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

В общем случае параметры могут передаваться методу либо по значению, либо по ссылке. Когда переменная передается по ссылке, вызываемый метод получает саму переменную, поэтому любые изменения, которым она подвергнется внутри метода, останутся в силе после его завершения. Но если переменная передается по значению, вызываемый метод получает копию этой переменной, а это значит, что все изменения в ней по завершении метода будут утеряны. Для сложных типов данных передача по ссылке более эффективна из-за большого объема данных, который приходится копировать при передаче по значению.

Давайте рассмотрим пример:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class myClass { public void someMethod(double myArr, int i) { myArr = 12.0; i = 12; } } class Program { static void Main(string args) { double arr1 = { 0, 1.5, 3.9, 5.1 }; int i = 0; Console.WriteLine("Массив arr1 до вызова метода: "); foreach (double d in arr1) Console.Write("{0}\t",d); Console.WriteLine("\nПеременная i = {0}\n",i); Console.WriteLine("Вызов метода someMethod ..."); myClass ss = new myClass(); ss.someMethod(arr1,i); Console.WriteLine("Массив arr1 после вызова метода:"); foreach (double d in arr1) Console.Write("{0}\t",d); Console.WriteLine("\nПеременная i = {0}\n",i); Console.ReadLine(); } } }

Методы в Си Шарп | 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;
}