Similar presentations:
Тема 6. ООП у VB i C# (4)
1. Тема. ООП у Visual Basic .NET i C#
1. ВІДМІННОСТІ МОВ VISUAL BASIC І VISUAL BASIC.NET2. BВЕДЕННЯ/ВИВЕДЕННЯ ДАНИХ У РЕЖИМІ КОНСОЛЬ (VB . NET, C#)
3. ОПЕРАТОР ОБРОБКИ СТРУКТУРОВАНИХ ВИКЛЮЧЕНЬ (VB . NET, C#)
4. СТРУКТУРИ, КЛАСИ І ПЕРЕРАХУВАННЯ
4.1. Приклад використання перерахування (клас Enum)
4.2. Приклад використання типу Structure, операторів Console.Read() і TryCatch-Finally
4.3. Приклад використання класу з властивостями
4.4. Приклад створення класа з подією
5. ПРИКЛАД УСПАДКУВАННЯ (VB . NET, C#)
6. ІНТЕРФЕЙСИ
7. ДЕЛЕГАТИ
2.
Тут можна скачати безкоштовну версію VS:https://visualstudio.microsoft.com/free-developer-offers/
http://www.visualstudio.com/en-us/products/
3. 1. Відмінності мов Visual Basic і Visual Basic .NET
Основні нововведення:Додано успадкування класів, що робить VB.NET по-справжньому
об’єктно-орієнтованою мовою. Базовий клас може бути тільки один,
але в якості такого можуть виступати як .NET-, так і COM-класи.
Добавлено
використання
конструкторів
і
деструкторів,
перезавантаження методів і властивостей, тобто допускається
існування однойменних функцій з різними аргументами.
VB.NET
підтримує роботу з інтерфейсами. Кожен клас може
реалізовувати один або кілька інтерфейсів.
З'явилося поняття делегатів (Delegates) – спеціальних об'єктів, що
зберігають вказівник на метод будь-якого класу.
Уведено конструкцію Try...Catch...Finally для обробки структурованих
виключень.
Конструкція Type…End Type замінена на
Structure...End Structure,
причому структури підтримують більшість можливостей класів.
4.
Додано поняття простору імен (Namespace).Програміст, що використовує вбудовані класи, отримує
доступ до простору імен через директиву:
Imports namespace.element
(Приклад: Imports System.IO)
namespace - назва імпортованого простору;
element - назва елемента простору (клас, простір імен тощо).
• Серйозним змінам піддалися типи даних. Тип Object – самий
загальний тип у VB.NET (замість Variant у VB6). Інші типи
розглядаються тепер як підкласи базового класу Object і мають
власні методи і властивості. У будь-якого простого типу є метод
ToString.
Dim s As String, a As Integer A=10
s=a.ToString
5.
• Цілочислові типи стали більш об’ємними (Integer – 4байтовий, Long – 8-байтовий, новий тип Decimal – 12байтовий). З’явився тип Char. Масиви індексуються тількиз нуля, рядки автоматично змінюють свою довжину при
присвоюванні їм нових значень.
Тип
CLR-тип
Размер (в байтах)
Integer System.Int32
4
Single
System.Single
4
String
System.String
Зависит от ОС
Boolean System.Boolean
2
Long
System.Int64
8
Byte
System.Byte
1
Char
System.Char
2
Date
System.DateTime 8
Decimal System.Decimal
16
Double System.Double
8
Short
2
System.Int16
6.
Вилучено багато морально застарілих конструкцій, такі, як On ...GoTo.
Wend замінений на End While. З’явився Continue.
Для
виходу з процедур і повернення значення функцій
використовується оператор Return. При виклику процедур аргументи
обов'язково беруться в дужки.
Змінилися
правила опису змінних. Описувати змінні можна
усередині блоків (наприклад усередині циклу). З'явилася можливість
присвоювати змінним початкові значення:
Dim a As T = v
Якщо початкові значення не задані, то змінні ініціалізуються
нульовими (числові дані) або порожніми значеннями (рядки,
вказівники).
7.
Зникла директива Set, перестали підтримуватися властивості зазамовчуванням. У VB 6, наприклад, в об'єкта Label була властивість
за замовчуванням Caption, і припустимими були такі конструкції:
Dim l1 As Label, l2 As Label
l1 = "Caption"
Set l1 = l2
На VB.NET аналогічний текст буде виглядати так:
Dim l1, l2 As Label ‘скорочений запис типів (раніше-не так)
l1.Text = "Caption"
l1 = l2
У VB6 операнди бінарних операцій And і Or завжди обчислювалися,
навіть якщо значення першого операнда And дорівняло False, а
значення першого операнда Or дорівнюло True. Правила обчислення
логічних виразів стали такими, як і в інших мовах (C++, C#, J#).
8. 2. Bведення/виведення даних у режимі консоль
Методи введення/виведення даних у режимі консолі (методи класуSystem.Console):
ReadLine – читає з консолі рядок символів до найближчого символу
переходу на новий рядок;
Dim returnValue As String
returnValue = Console.ReadLine() 'рядок
Read – читає з консолі один символ і повертає його код;
Dim returnValue As Integer
returnValue = Console.Read()
'код символу
ReadKey – читає з консолi один символ i повертає структуру
ConsoleKeyInfo, яка мiстить iнформацiю про натиснуту клавiшу.
Dim keyInfo As ConsoleKeyInfo = Console.ReadKey()
Dim returnValue As Char = keyInfo.KeyChar
WriteLine – виводить на монітор рядок символів, доповнюючи його у
кінці символами переходу на новий рядок і переведення каретки;
Write – робить те саме, що й Writeline, але без доповнення рядка
символом переходу на новий рядок;
9. При неформатованому виведенні методи викликаються з одним параметром будь-якого простого вбудованого типу VВ .NET. Dim x As
Форматоване і неформатоване виведенняDim x As Integer, y As Single, c As Char
...
Console.WriteLine(x): Console.Write(c): Console.WriteLine(y)
Dim x, y As Integer
x=23: y=-4
…
Console.WriteLine(“x={0}, y={1}, z={0}”,x, y)
підстановочні знаки з
параметрами
10. Приклад використання підстановочних знаків у VB .NET
Module Module1 ' https://onlinegdb.com/dIrwVMAAjpi=3.14
Sub Main()
3.14159265358979
Dim a, b, c As Integer
Console.WriteLine("pi={0:f2}", Math.PI) a=0038
b=ff
Console.WriteLine(Math.PI)
200
d=$1,003.21, c=200, d=1.003214e+003
a = 38
Console.WriteLine("a={0:d4}", a) 'виведеться a=0038
b = 255
Console.WriteLine("b={0:x}", b) 'Виведеться b=ff
c = 200
Console.WriteLine(c)
'Виведеться 200
Dim d As Double = 1003.214
'виведеться $1,003.21 в англійській версії Windows
Console.Write("d={0:c}, c={1:d}, d={0:e} ", d, c)
‘Console.Write($"d={d:c}, c={c:d}, d={d:e} ")
Console.ReadLine()
End Sub
End Module
11.
Приклад використання підстановочних знаків у C#using System; // https://onlinegdb.com/2Yti1_MGb
class Program
{
static void Main(string[] args)
{
int a, b, c;
Console.WriteLine("pi={0:f2}", Math.PI);
Console.WriteLine(Math.PI);
a = 38;
Console.WriteLine("a={0:d4}", a); //виведеться a=0038
b = 255;
Console.WriteLine("b={0:x}", b); //Виведеться b=ff
c = 200;
Console.WriteLine(c);
//Виведеться 200
double d = 1003.214;
//виведеться $1,003.21 в англійській версії Windows
Console.WriteLine("d={0:c}, c={1:d}, d={0:e} ", d, c);
Console.Write($"d={d:c}, c={c:d}, d={d:e} ");
Console.ReadLine();
}
}
12. 3. Оператор обробки структурованих виключень
Виключення – це виняткова ситуація часу виконання (runtime error) програми.Оператор Тry-Catch-Finally дає змогу виконати специфікований блок коду (catchstatements) при генерації виключення.
Синтаксис оператора Try - Catch - Finally:
Try
try_statements
[Catch [exception_1 [As type_1]] [When expression_1]
Catch_statements_1
[Exit Try]
Catch [exception_2 [As type_2]] [When expression 2]
Catch_ statements_2
[Exit Try]
...
Catch [exception_n [As_type_n] ] [When expression_n]
Catch_statements_ n
]
[Exit Try]
[Finally
[finally_statements]]
End Try
13.
Приклад обробки виключення (VB .NET)У прикладі перевіряється можливість виникнення виключення
OverflowException, яке
генерується при переповненні.
Конкретне виключення (exception), введене у фразі Catch, є об'єктом відповідного класу
виключення, і має визначені властивості. Важливою властивістю таких об'єктів є властивість
Message, яка містить системне (стандартне) повідомлення про виключення (помилку).
Class Program
Shared Sub Main()
Dim x As Integer
Dim n As Integer = 10000
Dim m As Integer = 2000000000 'максимальне ціле 2,147,483,647
…
Try
x = n * m : x /= m:…
Catch ex As OverflowException When m = 0
MsgBox("Ділення на нуль")
Catch ex As System.OverflowException
MsgBox("Занадто велике число")
‘MsgBox(ex.Message)
Catch
MsgBox("Невідоме виключення")
Finally
Beep() 'Найпростіший звуковий сигнал
End Try
End Sub
End Class
14. Приклад обробки виключення (C#)
using System;using System.Windows.Forms;
class Program
{
static void Main(string[] args)
{
int x; int n = 10000;
int m = 2000000000; //максимальне ціле 2,147,483,647
try
{
x = n * m;
x /= m;
}
catch (DivideByZeroException ex) // When clause not supported in C#
{
MessageBox.Show("Ділення на нуль", "Помилка");
}
catch (OverflowException ex)
{
MessageBox.Show("Занадто велике число", "Помилка");
}
catch (Exception ex)
{
MessageBox.Show("Невідоме виключення", "Помилка");
}
finally
{
Console.Beep(); // Найпростіший звуковий сигнал
Приклад обробки
виключення (C#)
15. 4. Структури, класи і перерахування у Visual Basic .NET
У Visual Basic .NET оператор Type не підтримується.При оголошенні структури використовується оператор
Structure як частина
конструкції Structure ... End Structure. Кожен член структури повинен мати
модифікатор доступу: Public, Friend або Private,.... Можна також використовувати
оператор Dim, що за замовчуванням має загальний доступ.
У VB.NET є поняття клас і структура. У них уніфікований синтаксис Структури
підтримують більшість можливостей класів, включаючи методи.
Спрощений синтаксис оголошення структури:
Structure ім’я_типу
Dim змінна As тип
Public змінна As тип
Friend змінна As тип
Private змінна As тип
End Structure
Опис типу Structure або Class розміщається поза межами процедур в модулі з
функціями.
Клас – може бути розміщено і в окремому модулі з розширенням vb.
Додати клас у проект можна за допомогою Project|Add class….
16.
Структури і класи в VB.NET можуть містити в собі поля (variables), методи(function/sub), події (events), властивості (properties).
Одна з відмінностей класу і структури, поягає в тому, що клас
передається по посиланню, а структура – за значенням.
Одна з причин реалізації класів – це наслідування.
[Public|Private|Protected|Friend] Class MyClass
Inherits OneClass
…
End Class
Public|Private|Protected|Friend - область видимості
Конструктор в VB.NET – це процедура New
Public Sub New()
MsgBox ("Create MyClass")
End Sub
Щоб використати дані класу, треба створити новий об’єкт.
Dim obj As MyClass = New MyClass()
Можна обійтися і без створення нового класу, якщо дані в класі оголошені
як Shared в VB, теж що і static в C++, C#.
В VB.NET у використанні деструкторів необхідності немає. Цим займається
саме середовище CLR (на нього і покладена так звана "збірка сміття" відповідальність за своєчасне знищення об'єктів).
Можна викликати деструктор явно. Деструктор завжди називається Finalize.
17. class struct
Структури i класисукупність даних і функцій
тип-посилання (купа)
наслідують
System.Object
підтримують одинарне
наслідування класів,
множинне – інтерфейсів
конструктор за замовчанням генерує компілятор;
можна перевизначити;
оголошення інших
конструкторів скасовує
автоматичну генерацію
поля можна ініціалізувати
в оголошенні класу
сукупність даних і функцій
тип-значення (стек)
наслідують
System.ValueType
підтримують множинне
наслідування інтерфейсів,
не підтримують – структур
конструктор за замовчанням компілятор генерує
завжди; його не можна
перевизначити
ініціалізувати поля в
оголошенні структури
заборонено
18. Відмінності між класами і структурами (C#)
Структури відносяься до типів значення, тобтовиділяти для них пам’ять з допомогою оператора
new не обов’язково, а класи відносяться до типів
посилання. Це означає, що для об’єкту класу
обов’язково потрібно виділяти пам’ять з допомогою
оператора new.
на відміну від класів, у структурах члени даних не
можуть бути оголошені з ключовим
словом protected
на відміну від класів, структури не підтримують
деструкторів
https://ppt-online.org/745019
19. Приклад консольної програми з використанням структур
Module Module1Structure Student
Public IdNumber As Integer
Dim Prizv As String
Dim Phone As String
End Structure
20.
Sub Main()Dim One, Two, Temp As Student, answer As String
One.IdNumber = 13441
One.Phone = ”8-050-374-0654"
One.Prizv = "Iванов”
Two.IdNumber = 13442
Two.Phone = ”8-066-374-1106"
Two.Prizv = "Петров"
21.
Doanswer = InputBox("Введіть номер 1 або 2")
If InStr("12", answer) = 0 Then Exit Sub
If answer = "1" Then Temp = One Else Temp = Two
MsgBox(Temp.Prizv & Chr(13) & Chr(10) & Temp.Phone,_
vbExclamation, "Iнформація про студента " + _
Temp.IdNumber.ToString)
answer = MsgBox("Продовжити ?", vbYesNo + vbQuestion,
"Закінчення")
Loop While answer = vbYes
End Sub
End Module
22. Приклад використання перерахування (клас Enum)
'Отримуємо кількість елементів у перерахуванніn = System.Enum. _
GetNames(GetType(MyColors)).GetLength(0)
Console.ForegroundColor = ConsoleColor.Blue
Console.WriteLine(n)
'З'ясовуємо, чи є певний елемент у перерахуванні.
Class Test
s = "yellow"
Shared Sub Main()
Console.ForegroundColor = ConsoleColor.DarkYellow
Dim s As String
flag = System.Enum.IsDefined(GetType(MyColors), s)
Dim names() As String
If flag Then
Dim flag As Boolean
Console.WriteLine("Element {0} exists", s)
Dim n As Integer
Else
'Отримуємо ім'я елемента перерахування з номером 1.
Console.WriteLine("Element {0} not exist", s)
Console.ForegroundColor = ConsoleColor.Green
End If
s = System.Enum.GetName(GetType(MyColors), 1)
Console.ReadLine()
Console.WriteLine(s)
End Sub
'Отримуємо всі імена перерахування.
End Class
names = System.Enum.GetNames(GetType(MyColors))
For Each s In names
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine(s)
Next
Public Enum MyColors
red
green
yellow
End Enum
23. При запуску програма видасть наступний результат:
Більшість методів - статичні. Першим параметром в них йде тип перерахування для його отримання ми використовуємо функцію GetType.Перед запуском треба у властивостях проекту задати ім’я класу, в якому міститься
точка входу проекту.
При запуску програма видасть наступний результат:
24. Приклад використання типу Structure, операторів Console.Read() і Try-Catch-Finally
Module Module1‘VB: https://onlinegdb.com/fXp1vF9zY
Structure Symbol ‘C#: https://onlinegdb.com/ej6oDNFdRc
Dim code As Integer
Public c As Char
Shared Public Number As Integer
Shared Function State(ByVal Size As Byte) As String
State = "Переповнення ? " & _
(Number>Size).ToString & "-" & Number.ToString()
End Function
‘жирне дописується автоматично
Умова. Створити масив структур для
Public Property ViewC() As Char буквено-цифрових символів (символGet
код символу). Про кожний введений
Return UCase(c)
символ з рядку введення виводити
End Get
інформацію про його десятковий і
Set(ByVal value As Char)шістнадцядковий коди. Не допускати
c = LCase(value)
введення пробільних символів
End Set
(згенерувати власне виключення).
End Property
При переповненні масиву структур
End Structure
(перехопити виключення)
заповнювати масив спочатку.
25.
Sub Main()Symbol.Number = 0
Dim elem, symbols(10) As Symbol ' тільки з 0 (11 елементів)
Dim s As String = vbCrLf & "Введiть рядок символiв,'.'- ознака кінця:"
Console.WriteLine(s)
Dim myEx As New ArgumentException("Недопустимий пробiл")
Dim ch As Char, code As Integer
Do
Dim i As Integer '=0
code = Console.Read()
Try
ch = Convert.ToChar(code)
If ch = vbLf Then
Console.WriteLine(s)
ElseIf Char.IsSeparator(ch) Then
Throw myEx
ElseIf Char.IsLetterOrDigit(ch) Then
Console.WriteLine(” Cимвол '{0}' - {1:d} - 0x{1:x4} .", ch, code)
' напряму
'symbols(i).c = ch
'symbols(i).code = code
26.
' через властивість set (малі букви)symbols(i).ViewC = ch
symbols(i).code = Convert.ToByte(symbols(i).c)
i += 1
Symbol.Number += 1
End If
Catch ex As ArgumentException
Console.WriteLine(ex.Message)
Catch ex As IndexOutOfRangeException
Console.WriteLine("Масив переповнено")
i = 0
End Try
Loop While ch <> "."
Console.WriteLine(Symbol.State(10))
For Each elem In symbols
' через власивість get (великі літери)
‘ Console.Write(elem.ViewC())
' напряму
Console.Write(elem.c)
Next
Console.ReadLine()
End Sub
End Module
27. Приклад використання класу з властивостями (варіант с класом)
Приклад використання класу зPublic Class Symbol
властивостями (варіант с класом)
Public code As Integer
Private c As Char
' звертатися тільки через властивості
Public Shared Number As Integer
Public Sub New() ‘ constructor
code = 65:
c = "A":
Number = 0
End Sub
Shared Function State(ByVal Size As Byte) As String
State = "Переповнення ? " & (Number > Size).ToString & "-" & Number.ToString()
End Function
Public Property ViewC() As Char
Get
Return UCase(c)
End Get
Set(ByVal value As Char)
c = UCase(value)
End Set
End Property
Public Shared Operator -(ByVal c1 As Symbol, ByVal c2 As Symbol) As Integer
Return c1.code - c2.code
End Operator
End Class
28.
Module Module1Catch ex As ArgumentException
Sub Main()
Console.WriteLine(ex.Message)
Symbol.Number = 0
Catch ex As IndexOutOfRangeException
Dim elem, symbols(10) As Symbol ' тільки з 0 (11
Console.WriteLine("Масив переповнено")
елементів)
i=0
...
End Try
ElseIf Char.IsLetterOrDigit(ch) Then
Loop While ch <> ".”
Console.WriteLine("Cимвол '{0}' - {1:d} - 0x{1:x4}
.", ch, code)
Console.WriteLine(Symbol.State(10))
' напряму до code не можна Private
'symbols(i).c = ch
For Each elem In symbols
'symbols(i).code = code
' через власивість get (великі літери)
' через власивість set
Console.Write(elem.ViewC)
Next
Dim one As New Symbol
one.ViewC = ch
Console.WriteLine("Оператор - :")
one.code = Convert.ToByte(one.ViewC)
Console.Write(symbols(1) - symbols(2))
symbols(i) = one
Console.ReadLine()
i += 1
End Sub
Symbol.Number += 1
End If
End Module
29. Приклад створення класа з подією
Class DominoPrivate r As New Random()
Public Event CatchDouble(number As Integer)
Public Function GetRandom()
Dim right, left As Integer
right = r.Next(0,7)
left = r.Next Mod 7
If right = left Then RaiseEvent CatchDouble(right)
Return right + left
End Function
End Class
Module Game
Dim WithEvents d As Domino
Public Sub Main()
Dim i As Integer
d = New Domino()
'Беремо кость 100 разів
For i = 1 To 100
Console.WriteLine(d.GetRandom())
Next
End Sub
'Добавляємо обробник
Private Sub d_CatchDouble(number As Integer) Handles d.CatchDouble
MsgBox("Дубль " & number & ":" & number)
End Sub
End Module
30.
31. 5.Приклад успадкування (VB .NET)
Public Class Parallelogram‘auto-implemented properties
Public Property Base As Double
Public Property Height As Double
Public Sub New()
‘The backing field will have the same name as
the property with an underscore prefixed to
the property name
_Base = 0
_Height = 0
End Sub
Public Sub New(ByVal dblB As Double,
ByVal dblH As Double)
Base = dblB
Height = dblH
End Sub
Public Overridable Function GetArea() As
Double
Return _Base * _Height
End Function
End Class
Public Class Triangle
Inherits Parallelogram
Public Sub New()
Base = 0
Height = 0
End Sub
Public Sub New(ByVal dblB As Double,
ByVal dblH As Double)
Base = dblB
Height = dblH
End Sub
Public Overrides Function GetArea()
As Double
Return MyBase.GetArea() / 2
End Function
End Class
32. 5.Приклад успадкування (C#)
public class Parallelogram{
// auto-implemented properties
public double Base { get; set;}
public double Height { get; set;}
public Parallelogram()
{
this.Base = 0;
this.Height = 0;
}
public Parallelogram(double dblB,
double dblH)
{
this.Base = dblB;
this.Height = dblH;
}
public virtual double GetArea()
{
return this.Base * this.Height;
}
}
public class Triangle : Parallelogram
{
public Triangle()
{
this.Base = 0;
this.Height = 0;
}
public Triangle(double dblB,
double dblH)
{
this.Base = dblB;
this.Height = dblH;
}
public override double GetArea()
{
return base.GetArea() / 2;
}
}
33. 6. Інтерфейси в VB.NET
Інтерфейс можна уявляти собі як абстрактний клас, в якому є тількиоголошення методів і властивостей. Абстрактні класи і віртуальні функції
також існують (ключові слова MustInherit і MustOverride відповідно).
Ніяких реалізацій в інтерфейсі немає.
В інтерфейсі також не може бути ніяких змінних – тільки властивості.
Ми можемо оголосити деякий клас як нащадок інтерфейсу. У цьому
випадку клас повинен реалізовувати всі методи і властивості інтерфейсу.
Власне кажучи, інтерфейси і служать предками для класів (або для інших
інтерфейсів) - в цьому їх головне призначення і є.
Один клас можна оголосити як нащадок від декількох інтерфейсів
одночасно.
Interface IMyInterface
Function MyFunc () As String
Sub MyProc ()
Property MyProp () As Integer
End Interface
...
34.
Оголошуємо клас MyNewClass як нащадок інтерфейсу IMyInterface.Class MyNewClass
Implements IMyInterface
...
В інтерфейсі ми оголошуємо функцію, процедуру і властивість. Імена інтерфейсів
прийнято починати на букву I. В інтерфейсі ніякої реалізціі немає - все будемо
реалізовувати в класі, похідному від інтерфейсу.
Далі оголошуємо клас MyNewClass як нащадок інтерфейсу IMyInterface.
Class MyNewClass
Implements IMyInterface
...
Function MyFunc() As
...
End Function
String
Implements IMyInterface.MyFunc
Sub MyProc() Implements IMyInterface.MyProc
...
End Sub
Property MyProp() As Integer Implements IMyInterface.MyProp
...
End Property
35.
Використовується такий клас точно також, як і будь-який інший.Клас ми пожем оголошувати нащадком не одного, а декількох
інтерфейсів:
Class MyNewClass
Implements IMyInterface1
Implements IMyInterface2
...
End Class
При цьому в різних інтерфейсах можуть бути функції, властивості й
процедури, які називаються однаково (ім'я функції пишеться після
крапки, наступної за ім'ям інтерфейсу). Якщо клас є нащадок деякого
інтерфейсу, то він повинен реалізовувати всі функції, процедури і
властивості цього інтерфейсу.
Інтерфейси можуть виступати як тип даних. Наприклад, у нас може
бути деяка функція, яка приймає параметр має тип деякого
інтерфейсу. При виклику такої функції ми підставляємо як параметр
екземпляр конкретного класу, причому цей клас повинен бути нащадком
нашого інтерфейсу.
36. Приклад оголошення класу
Class MyNewClassImplements IMyInterface
Private MyData As Integer
'Реалізація функції інтерфейсу
Function MyFunc () As String Implements IMyInterface.MyFunc
Return "My string"
End Function
'Реалізація процедури інтерфейсу
Sub MyProc () Implements IMyInterface.MyProc
Console.WriteLine ("My procedure")
End Sub
'Реалізація властивості
Property MyProp() As Integer Implements IMyInterface.MyProp
Get
Return MyData
End Get
Set(ByVal Value As Integer)
MyData = Value
End Set
End Property
End Class
37. using System; // Інтерфейс для підрахунку периметра і площі геометричної фігури public interface IShape { double
Приклад застосування інтерфейсів в C#using System;
// Інтерфейс для підрахунку периметра і площі геометричної фігури
public interface IShape
{
double CalculatePerimeter();
double CalculateArea();
}
// Клас круга, який реалізує IShape
public class Circle : IShape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
public double CalculatePerimeter()
{
return 2 * Math.PI * Radius;
}
public double CalculateArea()
{
return Math.PI * Math.Pow(Radius, 2);
}
38.
// Клас прямокутника, який реалізує IShapepublic class Rectangle : IShape
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public double CalculatePerimeter()
{
return 2 * (Width + Height);
}
public double CalculateArea()
{
return Width * Height;
}
}
39.
class Program{
static void Main()
{
// Створюємо масив з двох фігур
IShape[] shapes = new IShape[2];
shapes[0] = new Rectangle(5, 10);
shapes[1] = new Circle(7);
// Виводимо інформацію про обидві фігури в масиві
// Використовуємо foreach для виведення інформації про кожну фігуру в маси
foreach (IShape shape in shapes)
{
Console.WriteLine($"Perimeter: {shape.CalculatePerimeter()}");
Console.WriteLine($"Area: {shape.CalculateArea()}");
Console.WriteLine();}
}
}
40. 7. Делегати в VB.NET
Делегати можна уявляти собі як змінні, в яких можна зберігати деякіфункції. Як у змінну типу Integer ми можемо записати деяке ціле число,
так і в делегат можна записати деяку функцію.
Делегати розрізняються за типами. Тип делегата визначається типом
і кількістю параметрів функції, а також типом значення що
повертається. Таким чином, якщо ми визначимо делегат який має,
наприклад, два параметри типу Integer, і який повертає значення типу
Boolean, то такому делегату ми зможемо присвоїти тільки функцію, яка
приймає два цілих параметра і повертає значення булевого типу.
Залежно від вибору користувача f буде або функцією f1, або f2, або f3.
Зазначимо, що замість запису
можна писати:
41. Оголошення делегата VB
Delegate Function MyDelegate ( ByVal X As Integer) AsModule Test
'Оголошення декількох функцій
Function f1(ByVal x As Integer) As Single
Return x * x
End Function
Function f2(ByVal x As Integer) As Single
Return x^3
End Function
Function f3(ByVal x As Integer) As Single
Return Math.Pow(x, x+0.5)
End Function
Single
Sub Main ()
Dim F As MyDelegate 'Оголошення змінної типу делегата
Dim A As Integer
a = CInt (Trim (InputBox(“Введіть номер функції”))
Select Case a
Case 1
'Записуємо в делегат функцію Y1
f = AddressOf f1
Case 2
'Записуємо в делегат функцію y2
f = AddressOf f2
Case 3
'Записуємо в делегат функцію Y3
f = AddressOf f3
End Select
'Підсумовуємо значення обраної функції в 10 точках
Dim i As Integer
Dim sum As Single = 0
For i = 1 To 10
sum + = f (i)
Next
MsgBox ("Сума дорівнює " & sum.ToString)
End Sub
End Module
42. Оголошення делегата C#
using System;delegate float MyDelegate(int x);
class Test {
static float f1(int x)
Оголошення делегата C#
{ return x * x; }
static float f2(int x)
{return (float)Math.Pow(x, 3);}
static float f3(int x)
{return (float)Math.Pow(x, x + 0.5);}
static void Main()
{
MyDelegate f;
int a = int.Parse(Console.ReadLine().Trim());
switch (a)
float sum = 0;
{
for (int i = 1; i <= 10; i++)
case 1:
{
f = fl; break;
sum += f(i);
case 2:
}
f = f2; break;
case 3:
Console.WriteLine("Сума дорівнює " +
f = f3; break;
sum.ToString());
default: return;
}
}
programming