Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10570 / 333 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 15:

С#. Классы и структуры.

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >

Структуры

Структуры языка C# идентичны классам и представляют поименованную совокупность компонент, называемых членами или элементами структуры. Элементом структуры может быть переменная любого допустимого типа или функция.

Однако структура относится к размерному типу, а класс - к ссылочному типу. Под структуру выделяется память, достаточная для размещения всех элементов структуры.

При создании массивов применение типа структуры бывает более эффективно, чем применение типа класса.

Тип struct является размерным типом, который может содержать конструкторы, константы, поля, методы, свойства, индексаторы, операторы и вложенные типы.

Объявление структуры может иметь следующее формальное описание (необязательные элементы указаны в квадратных скобках):

[атрибуты] ]модификаторы] struct имя_структуры [:интерфейсы] {
  конструктор () {}
  тип_элемента_структуры  имя_ элемента1;
  тип_элемента_структуры  имя_ элемента2;
   ...
  тип_элемента_структуры  имя_ элементаN;
} [ ;]
// имя_элемента может быть именем переменной или именем функции

Для обращения к отдельным элементам структуры используется оператор . (точка).

Доступ к элементам структуры может иметь следующее формальное описание:

struct имя_структуры { 
  модификатор тип_элемента элемент_структуры1;
  модификатор тип_элемента элемент_структуры2; 
} 
  // Объявление переменной типа структуры
  имя_структуры имя_переменной_структуры1; 
  имя_структуры [] имя_переменной_структуры2 =
                            new имя_структуры[размерность];
// Доступ к элементу структуры
имя_переменной_структуры1.элемент_структуры1= значение1;
имя_переменной_структуры2[индекс].элемент_структуры1=значение2;

Например:

/* Данный пример иллюстрирует консольное приложение, позволяющее добавлять и отображать элементы структуры. Используемый массив myAB содержит 400 элементов, каждый из которых является структурой из двух полей - name и telfax*/
using System;
namespace MyStruct1
{
struct AddrBookType 
{  public string name;
  public string telfax ;
} 
/* Созданная структура определяет новый структурный тип AddrBookType.  Элементы структуры объявлены с модификаторами доступа public, так как по умолчанию элементы доступны только внутри структуры */
class Class1
{
  static void Main(string[] args)
 {  // Создание массива структур
   AddrBookType[] myAB= new AddrBookType[400];  
  char icount;
  char iloop;
  int i=0;
  int j=0;
  while (true)         // Запрос кода операции
   {Console.Write ("Insert kod (0 - new record, 
                       1 - show all, 2 - exit): ");
        icount = (char)Console.Read ();
    while (true)          // Чтение потока ввода
         { iloop = (char)Console.Read ();
       /* Цикл чтения символов будет завершен при 
             нажатии пользователем клавиши Enter и 
             получения из потока ввода символа '\n' */
       if (iloop == '\n') break;}
        if (icount=='2')  break;
        switch (icount)
     {case '0':  
         Console.WriteLine("Insert Name: ");
             myAB[i].name =Console.ReadLine ();
             Console.WriteLine("Insert phone : ");
             myAB[i].telfax= Console.ReadLine ();
              i++;   // Счетчик введенных элементов
     break;
      case '1':    // Запись в стандартный поток
                       // вывода
     for ( j=0; j<i;j++)
       {Console.Write(myAB[j].name); 
        Console.Write("   ");
             Console.WriteLine(myAB[j].telfax); }
     break;
      default : 
             Console.WriteLine("Ошибка ввода");
             break;
    }     // Конец switch
      }      // Конец while
}  
}  }
Листинг 15.3.

Язык C# позволяет создавать переменные типы структуры двумя способами:

  • традиционным способом с применением оператора new - в этом случае объявление переменной типа структуры идентично объявлению переменной типа класса и при объявлении переменной возможна одновременная инициализация полей структуры;
  • обычным объявлением переменной как для любого размерного типа.
< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Андрей Шулин
Андрей Шулин
Россия, Усть-илимск