Шаг 195.
Язык программирования C#. Начала.
Перечисления и структуры. Структуры и метод ToString()

    На этом шаге мы рассмотрим переопределение этого метода в структурах.

    Хотя структуры не поддерживают наследование, они встроены в иерархию наследования. Поэтому для структур так же, как и для классов, можно переопределить метод ToString(). В примере ниже по этому поводу представлен небольшой пример.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr195_1
{
    // Структура: 
    struct MyStruct {
        // Открытое текстовое поле: 
        public string name;
        // Открытое целочисленное поле: 
        public int code;
        // Конструктор с двумя аргументами: 
        public MyStruct(string name, int code) {
            // Присваивание значения полям:
            this.name = name;
            this.code = code;
        }
        // Переопределение метода ToString(): 
        public override string ToString() {
            // Текстовая строка:
            string txt = "Экземпляр \"" + name + "\"\n";
            txt += "Числовое поле: " + code + "\n";
            // Результат метода: 
            return txt;
        }
    }

    // Класс с главным методом:
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Создание экземпляров структуры:
            MyStruct A = new MyStruct("Alpha", 100);
            MyStruct B = new MyStruct("Bravo", 200);
            // Операции с экземплярами:
            Console.WriteLine(A);
            string text = B + "Выполнение программы завершено";
            Console.WriteLine(text);
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Результат выполнения программы представлен ниже:


Рис.1. Результат выполнения программы

    У структуры MyStruct два открытых поля: текстовое name и целочисленное code. В структуре описан конструктор с двумя аргументами. Эти аргументы определяют значения полей создаваемого экземпляра структуры.


Аргументы конструктора имеют такие же названия, как и поля. Поэтому в теле конструктора использовано ключевое слово this, обозначающее экземпляр структуры. Обращение к полям выполняется инструкциями вида this.name и this.code, а идентификаторы name и code в теле конструктора означают аргументы.

    Также в структуре описан (переопределен) метод ToString(). Результатом метод возвращает текстовую строку, которая содержит информацию о значениях полей экземпляра структуры.


При описании метода ToString() используется ключевое слово override.

    В главном методе программы командами

  MyStruct A = new MyStruct("Alpha", 100);
и
  MyStruct B = new MyStruct("Bravo", 200);
создаются экземпляры A и B структуры. При выполнении команды
  Console.WriteLine(A);
для экземпляра A вызывается метод ToString(), и текстовая строка, возвращаемая этим методом, отображается в консольном окне. Затем объявляется текстовая переменная text, в качестве значения которой присваивается выражение B + ''Выполнение программы завершено". Значение этого выражения вычисляется так: для экземпляра B вызывается метод ToString(), и полученная в результате строка объединяется со вторым текстовым операндом выражения. Значение текстовой переменной text отображается в консольном окне командой
  Console.WriteLine(text);    .

    На следующем шаге мы рассмотрим свойства и индексаторы в структурах.




Предыдущий шаг Содержание Следующий шаг