Тема лекції 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. Вплив темпераменту на діяльність людини.