Тема лекції 9: психічні властивості. Темперамент

Else

Else

Class Classl

{

delegate double processDelegate (double param1, double param2);

static double Multiply(double param1, double param2)

{

return param1 * param2;

}

static double Divide(double param1, double param2)

{

return param1 / param2;

}

static void Main (string [] args)

{

processDelegate process;

Console.WriteLine(“Enter 2 numbers separated with a comma:”);

string input = Console.ReadLine();

int commaPos = input.IndexOf{',');

double param1= Convert.ToDouble(input.Substring(0, commaPos));

double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length –

commaPos - 1));

Console.WriteLine(“Enter M to multiply or D to divide:”);

input = Console.ReadLine();

if (input == “M”)

process = new processDelegate(Multiply);

process = new processDelegate(Divide);

Console.WriteLine(“Result: {0}”, process(param1, param2));

}

}

Этот код описывает делегата (processDelegate), сигнатура которого совпадает с сигнатурой двух функций: Multiply() и Divide(). Делегат имеет следующее определение:

delegate double processDelegate (double paraml, double param2);

Ключевое слово delegate указывает, что данное определение является определением делегата, а не функции (это определение располагается в том же месте программы, где могло бы находиться и определение функции). Далее приводится сигнатура, в которой задаются возвращаемое значение типа double и два параметра типа double. Используемые в сигнатуре имена являются произвольными, поэтому тип делегата и имена параметров мы можем выбирать по своему усмотрению. В данном случае мы выбрали имя делегата processDelegate, а параметры назвали paraml param2.

Код функции Main() начинается с того, что мы объявляем переменную, воспользовавшись описанным типом делегата:

static void Main (string [] args)

{

processDelegate process;

Затем следует абсолютно стандартный для С# код, который запрашивает два числа, разделенные запятой, и присваивает их двум переменным типа double:

Console.WriteLine(“Enter 2 numbers separated with a comma:”);

string input = Console.ReadLine();

int commaPos = input.IndexOf(',');

double param1 = Convert.ToDouble(input.Substring(0, commaPos));

double param2 = Convert.ToDouble (input. Substring (commaPos + 1,

input.Length - commaPos - 1));

Затем мы запрашиваем пользователя, следует ли умножать или делить эти числа:

Console.WriteLine(“Enter M to multiply or D to divide:”);

input = Console.ReadLine();

В зависимости от полученного ответа мы инициализируем переменную-делегат:

if (input == "М")

process = new processDelegate(Multiply);

process = new processDelegate(Divide);

Для присвоения переменной-делегату ссылки на функцию нам приходится использовать несколько странно выглядящий синтаксис. Так же, как и в случае присваивания значений массиву, для создания нового делегата используется ключевое слово new. После этого слова указывается тип создаваемого делегата и задается параметр, определяющий ту функцию, которую мы хотим использовать, а именно функцию console.WriteLine(). Обратите внимание, что этот параметр не совпадает ни с параметрами типа делегата, ни с параметрами используемой функции: это уникальный синтаксис, применяемый исключительно для осуществления присваивания делегату. В качестве параметра используется просто имя той функции, которую необходимо использовать, без скобок.

Наконец, мы вызываем выбранную нами функцию с помощью делегата. Здесь применяется один и тот же синтаксис, независимо от того, на какую именно функцию ссылается делегат:

Console.WriteLine(“Result: {0}”, process(param1, param2));

}

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

static void executeFunction(processDelegate process)

{

process(2.2, 3.3);

}

Это означает, что мы получаем возможность управлять поведением функций, передавая им в качестве параметров делегатов функций, что во многом напоминает выбор используемого (snap-in). Например, может иметься функция, используемая для сортировки строкового массива по алфавиту. Существуют различные алгоритмы сортировки списков, обладающие различным быстродействием, что зависит от характеристик сортируемого списка. С помощью делегатов мы получаем возможность определять метод, который необходимо использовать, передавая функции, выполняющей сортировку, делегата той функции, в которой реализован соответствующий алгоритм сортировки.

1. Поняття про темперамент.

2. Фізіологічні основи темпераменту.

3. Психологічна характеристика темпераменту.

4. Головні властивості темпераменту.

5. Темперамент і особистість.

6. Вплив темпераменту на діяльність людини.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: