C #. Використання делегата для виклику анонімного методу

  1. зміст Умова задачі
  2. Математична постановка задачі
  3. виконання
  4. 2. Розробка форми додатка
  5. 2.2. Налаштування елементів управління
  6. 3. Написання програмного коду
  7. 3.1. Оголошення типу делегата
  8. 3.2. Програмування обробника події кліка на кнопці «Обчислити»
  9. 3.3. Текст модуля Form1.cs
  10. 4. Запуск програми на виконання

зміст

Умова задачі

Розробити програму, що знаходить площу трикутника за формулою Герона. У додатку реалізувати виклик анонімного методу за допомогою делегата. Метод повинен здійснювати обчислення площі трикутника. Додаток реалізувати в Microsoft Visual Studio за шаблоном Windows Forms Application.

Математична постановка задачі

Формула Герона має вигляд:

де де

  • S - площа трикутника;
  • a, b, c - довжини сторін трикутника;
  • p - напівпериметр, який обчислюється за формулою:

S - площа трикутника;   a, b, c - довжини сторін трикутника;   p - напівпериметр, який обчислюється за формулою:

виконання

1. Створення проекту

Запустити систему Microsoft Visual Studio. Створити проект по шаблону Windows Forms Application. Зберегти проект в довільній папці, наприклад:

D: \ Programs \ C_Sharp \ TrainDelegates03

Більш детальний приклад створення і збереження проекту за шаблоном Windows Forms Application описується в темі:

В результаті буде створена нова форма додатка, як показано на малюнку 1.

В результаті буде створена нова форма додатка, як показано на малюнку 1

Мал. 1. Форма додатка після створення проекту

2. Розробка форми додатка

2.1. Розміщення елементів управління на формі

Розмістити на формі наступні елементи управління:

  • 4 елементи управління типу Label. В результаті буде створено 4 об'єкти (змінні) з іменами label1, label2, label3, label4;
  • 1 елемент управління типу Button. Буде створено об'єкт з ім'ям button1;
  • 3 елементи управління типу TextBox. В результаті буде створено 3 об'єкти з іменами textBox1, textBox2, textBox3.

Після розміщення елементів управління, форма додатка буде мати приблизний вигляд, як показано на малюнку 2.

Мал. 2. Форма додатка після розміщення елементів управління

2.2. Налаштування елементів управління

Більш детальний приклад того, як здійснюється настройка елементів управління типів Button, Label, TextBox описаний в темі:

Налаштувати такі властивості елементів управління:

  • в елементі управління label1 властивість Text = "a =« (label1.Text = «a =«);
  • label2.Text = «b =«;
  • label3.Text = «c =«;
  • в елементі управління button1 властивість Text = "Обчислити» (button1.Text = «b =«);
  • в об'єкті, який відповідає формі Form1, властивість Text = "Площа трикутника».

Text = «b =«);   в об'єкті, який відповідає формі Form1, властивість Text = Площа трикутника»

Мал. 3. Головна форма програми після налаштування

3. Написання програмного коду

Для написання програмного коду потрібно перейти в файл Form1.cs, який відповідає головній формі програми (програми).

3.1. Оголошення типу делегата

У тілі класу форми Form1 оголосити тип делегата:

// оголошення типу делегата delegate float SquareTriangle (float a, float b, float c);

Про оголошеному типі делегата можна сказати наступне:

  • тип делегата носить ім'я SquareTriangle;
  • делегат цього типу буде отримувати три параметра типу float і повертати значення типу float.

Після оголошення типу, текст модуля «Form1.cs» наступний:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TrainDelegates03 {public partial class Form1: Form {// оголошення типу делегата delegate float SquareTriangle (float a, float b, float c); public Form1 () {InitializeComponent (); }}}

3.2. Програмування обробника події кліка на кнопці «Обчислити»

Докладний приклад програмування події кліка на кнопці описаний в темі:

Текст обробника події кліка на кнопці button1:

private void button1_Click (object sender, EventArgs e) {// Оголошення делегата з ім'ям ST, який обчислює площу трикутника SquareTriangle ST; ST = delegate (float a, float b, float c) {float s, p, d; p = (a + b + c) / 2.0f; d = p * (p - a) * (p - b) * (p - c); if (d <0) return -1.0f; s = (float) Math .Sqrt (p * (p - a) * (p - b) * (p - c)); return (float) s; }; // отримати значення довжин a, b, c float aa, bb, cc; aa = (float) Convert .ToDouble (textBox1.Text); bb = (float) Convert .ToDouble (textBox2.Text); cc = (float) Double .Parse (textBox3.Text); // так теж можна перетворювати // виклик делегата float area; area = (float) ST (aa, bb, cc); // вивід результату на форму label4.Text = "S =" + area.ToString (); }

Пояснимо деякі фрагменти коду. У обробнику події оголошується делегат з ім'ям ST типу SquareTriangle. Делегат ST посилається на анонімне метод, який отримує вхідними 3 параметра типу float. В анонімному методі здійснюється обчислення площі трикутника за формулою Герона. Результат (площа) повертається за допомогою оператора return.

Довжини сторін, які вводяться з клавіатури (елементи управління textBox1, textBox2, textBox3) розміщуються в змінних aa, bb, cc. Згідно синтаксису С #, змінні, які оголошені в анонімному методі, мають видимість на весь блок коду обробника події button1_Click (). Тому, не може бути однакових імен в обробнику події і анонімному методі, який описаний в цьому обробнику. Тобто, оголошення

float aa, bb, cc;

є вірним. Якщо в тексті обробника події спробувати написати

float a, b, c;

то вийде помилка компіляції, оскільки такі імена вже використовуються в анонімному методі.

3.3. Текст модуля Form1.cs

Весь програмний код модуля Form1.cs має вигляд:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TrainDelegates03 {public partial class Form1: Form {// оголошення типу делегата delegate float SquareTriangle (float a, float b, float c); public Form1 () {InitializeComponent (); } Private void button1_Click (object sender, EventArgs e) {// Оголошення делегата з ім'ям ST, що обчислює площу трикутника SquareTriangle ST; ST = delegate (float a, float b, float c) {float s, p, d; p = (a + b + c) / 2.0f; d = p * (p - a) * (p - b) * (p - c); if (d <0) return -1.0f; s = (float) Math .Sqrt (p * (p - a) * (p - b) * (p - c)); return (float) s; }; // взяти значення довжин a, b, c float aa, bb, cc; aa = (float) Convert .ToDouble (textBox1.Text); bb = (float) Convert .ToDouble (textBox2.Text); cc = (float) Double .Parse (textBox3.Text); // так теж можна конвертувати // виклик делегата float area; area = (float) ST (aa, bb, cc); // вивід результату на форму label4.Text = "S =" + area.ToString (); }}}

4. Запуск програми на виконання

Після виконаних дій можна запускати програму на виконання та тестувати її роботу.

пов'язані теми