Структуры и методы. Инициализация структур. Конструкторы в структурах. Свойства в структурах

Структуры и методы. Инициализация структур. Конструкторы в структурах. Свойства в структурах


Содержание


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.

 


Связанные темы