Структури і методи. Ініціалізація структур. Конструктори в структурах. Властивості в структурах

Структури і методи. Ініціалізація структур. Конструктори в структурах. Властивості в структурах


Зміст


1. Приклад структури, в якій оголошені методи

Дано структуру, яка описує дані про абонента в телефонному довіднику. Структура має ім’я Telephone. У структурі реалізовано 5 полів і 11 методів, які оперують цими полями. Також у структурі є конструктор, що ініціалізує значення полів структури. Поля структури оголошені як приховані (приватні), тобто мають ідентифікатор доступу private. Методи та конструктор мають ідентифікатор доступу public і є загальнодоступними.
Нижче наведено код такої структури

struct Telephone
{
    // поля структури - приватні
    private string number; // номер телефону
    private string name; // ім'я абонента
    private string surname; // прізвище абонента
    private string address; // адреса
    private int code; // поштовий код

    // конструктор, що ініціалізує поля структури
    public Telephone(string Number, string Name, string Surname, string Address, int Code)
    {
        // заповнення значень змінних - обов'язково мають заповнюватись усі поля структури
        number = Number;
        name = Name;
        surname = Surname;
        address = Address;
        code = Code;
    }

    // методи доступу до полів структури
    // читання даних
    public string Get_Number() { return number; }
    public string Get_Name() { return name; }
    public string Get_Surname() { return surname; }
    public string Get_Address() { return address; }
    public int Get_Code() { return code; }

    // заповнення даних структури
    public void Set_Number(string Number) { number = Number; }
    public void Set_Name(string Name) { name = Name; }
    public void Set_Surname(string Surname) { surname = Surname; }
    public void Set_Address(string Address) { address = Address; }
    public void Set_Code(int Code) { code = Code; }
}

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

// демонстрація використання методів
Telephone T1;

// ініціалізація полів з допомогою конструктора
T1 = new Telephone("900293", "Johnson ", "John", "Moscow", 3902);

string Number, Name, Surname, Address;
int Code;

Number = T1.Get_Number(); // Number = "900293"
Name = T1.Get_Name(); // Name = "Johnson"
Code = T1.Get_Code(); // Code = 3902

// Встановити нове значення Number
T1.Set_Number("777777");
Number = T1.Get_Number(); // Number = "777777"

// Встановити нове значення Code
T1.Set_Code(12345);
Code = T1.Get_Code(); // Code = 12345

 

2. Яким чином можна ініціалізувати поля (дані) структури? Приклад

Для зручної ініціалізації полів даних структури, в структурі можна оголосити явно заданий конструктор.

Приклад. Реалізація явно заданого конструктора для структури типу Point, що описує точку на координатній площині. Оголошення структури наступне.

struct Point
{
    public int x, y;

    // явно заданий конструктор
    public Point(int nx, int ny)
    {
        x = nx;
        y = ny;
    }
}

Виклик конструктора при оголошенні екземпляру (об’єкту) структури.

Point P = new Point(5, 6); // P.x = 5; P.y = 6

 

3. Чи можна в структурі оголошувати конструктор за замовчуванням?

Конструктор за замовчуванням або конструктор без параметрів, не можна оголошувати в структурі. Для всіх структур система визначає конструктор за замовчуванням автоматично. Тому немає потреби у додатковому оголошенні конструктора за замовчуванням.



 

4. Чи можна в структурі оголошувати деструктор?

В структурі оголошувати деструктор не можна.

 

5. Як в структурі оголосити явно заданий конструктор? Приклад

У даному прикладі реалізована структура типу Date, в якій є конструктор, що ініціалізує поля структури значеннями.

struct Date
{
    public int day; // число
    public int month; // місяць
    public int year; // рік

    public Date(int nday, int nmonth, int nyear)
    {
        day = nday;
        month = nmonth;
        year = nyear;
    }
}

Далі наводиться приклад використання такого конструктору в обробнику події

private void button3_Click(object sender, EventArgs e)
{
    Date d = new Date(2, 3, 2001); // викликати конструктор

    // вивід полів на форму
    label1.Text = d.day.ToString();
    label2.Text = d.month.ToString();
    label3.Text = d.year.ToString();
}

 

6. Приклад структури, що містить властивості

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

Нехай в деякому класі оголошено структуру, що описує точку на координатній площині. Структура має:

  • дві внутрішні змінні x, y;
  • метод SetXY(), що встановлює значення змінних x, y новими значеннями;
  • дві властивості X, Y. Ці властивості забезпечують читання (get) і запис (set) внутрішніх змінних x, y.
// структура, що описує точку на координатній площині
struct Point
{
    int x, y;

    public void SetXY(int nx, int ny)
    {
        x = nx;
        y = ny;
    }

    // властивість X
    public int X
    {
        get { return x; }
        set { x = value; }
    }

    // властивість Y
    public int Y
    {
        get { return y; }
        set { y = value; }
    }
}

Нижче наведено використання структури Point з програмного коду деякого методу класу.

// структура ініціалізується оператором new
Point P = new Point();

// записати у змінні x, y значення 25, 30 з допомогою властивостей
P.X = 25;
P.Y = 30;

int t;
t = P.Y; // t = 30

Важливо тут, щоб екземпляр структури створювався з використанням оператора new.

 


Зв’язані теми