Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  Прочее  /  Структуры в языке C#

Структуры в языке C#

Данная разработка содержит материал по использованию структур в языке С#. Материал полезен для подготовки и проведения занятий по дисциплине "Основы алгоритмизации и программирования" специальности 09.02.07
27.12.2022

Содержимое разработки

Занятие №60 Назначение и синтаксис структуры. Элементы тела структуры. Сходства и различия структур и классов.

Занятие №60

Назначение и синтаксис структуры. Элементы тела структуры. Сходства и различия структур и классов.

 Наряду с классами структуры представляют еще один способ создания собственных типов данных в C#.  Объявляется структура со словом  struct    Структура и класс очень похожи по функциональности.   Структура как и класс содержит конструкторы, переменные, методы.  Синтаксис объявления структуры: struct имя : интерфейсы { // объявления членов } Пример описания структуры public struct Book   {        // members        public string Name;        public int Price;        

Наряду с классами структуры представляют еще один способ создания собственных типов данных в C#.

Объявляется структура со словом  struct   Структура и класс очень похожи по функциональности.  Структура как и класс содержит конструкторы, переменные, методы.

Синтаксис объявления структуры:

struct имя : интерфейсы {

// объявления членов

}

Пример описания структуры

public struct Book       // members       public string Name;       public int Price;      

  // constructor        public Book(string name, int price)        {             Name = name;             Price = price;        }         // methods        public void Show()        {             Console.WriteLine(

  // constructor       public Book(string name, int price)       {            Name = name;            Price = price;       }       // methods       public void Show()       {            Console.WriteLine(" Название книги {0}, Цена {1}", Name, Price);       } 

В структурах нельзя определить деструктор.  Объект структуры может быть создан 2-мя способами:   • без оператора new    • с оператором new . Создание структуры без оператор new Book book;   Так создается объект структуры без оператора new    Но необходимо проинициализировать члены структуры.   Если не проинициализируем члены структуры будет ошибка:  error CS0165: Use of unassigned local variable...   Пример создания структуры без оператор new: using System;  using System.Collections.Generic; using System.Linq;  

В структурах нельзя определить деструктор. 

Объект структуры может быть создан 2-мя способами:  • без оператора new   • с оператором new .

Создание структуры без оператор new

Book book;  Так создается объект структуры без оператора new   Но необходимо проинициализировать члены структуры. 

Если не проинициализируем члены структуры будет ошибка:  error CS0165: Use of unassigned local variable...

Пример создания структуры без оператор new:

using System; 

using System.Collections.Generic;

using System.Linq;  

namespace ConsoleApplication1   {        public  struct  Book        {             // members             public string Name;             public int Price;              // methods             public void Show()             {                  Console.WriteLine(

namespace ConsoleApplication1  {       public  struct  Book       {            // members            public string Name;            public int Price;            // methods            public void Show()            {                 Console.WriteLine("Название книги {0}, Цена {1}", Name, Price);            }       }  class  Program        {            static void Main(string[] args)            { 

                 // создаем структуру без оператора new                   Book book;                   // инициализируем данные структуры                   book.Name = 

                 // создаем структуру без оператора new                  Book book;                 // инициализируем данные структуры                  book.Name = "Волшебник Земноморья";                 book.Price = 70;                 // Показываем результат на экране                 book.Show();            }       }  }

Создание структуры с оператором new, без параметров (по умолчанию)

Book book = new Book();   Так создается объект структуры с оператором new без параметров.

 Вызовется конструктор по умолчанию (конструктор без параметров).   Для структур мы не можем определить конструктор без параметров. Конструктор по умолчанию (конструктор без параметров), определяется для всех структур автоматически и его не видно в коде.  Пример using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Threading.Tasks;    namespace ConsoleApplication1   {        public struct Book        {             // members             public string Name;             public int Price; 

Вызовется конструктор по умолчанию (конструктор без параметров).  Для структур мы не можем определить конструктор без параметров. Конструктор по умолчанию (конструктор без параметров), определяется для всех структур автоматически и его не видно в коде. 

Пример

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  using System.Threading.Tasks;  namespace ConsoleApplication1  {       public struct Book       {            // members            public string Name;            public int Price; 

// constructor             public Book(String name, int price)             {                  Name = name;                  Price = price;             }              // methods             public void Show()             {                  Console.WriteLine(

// constructor            public Book(String name, int price)            {                 Name = name;                 Price = price;            }            // methods            public void Show()            {                 Console.WriteLine("Название книги {0}, Цена {1}", Name, Price);            }       } 

class  Program        {            static void Main(string[] args)            { 

 // создаем объект структуры с оператором new без //параметров                  Book book = new Book();                  // конструктор по умолчанию установит значения                  // Name =

// создаем объект структуры с оператором new без //параметров                 Book book = new Book();                // конструктор по умолчанию установит значения                 // Name = ""                 // Price = 0 

                // Показываем результат на экране                 book.Show();             }       }  } Можно инициализировать структуру в фигурных скобках

static void Main(string[] args)  { 

   // создаем объект структуры с оператором new и // устанавливаем значения        Book book = new Book() { Name = 

  // создаем объект структуры с оператором new и // устанавливаем значения       Book book = new Book() { Name = "Волшебник Земноморья", Price = 70 };       // Name = "Волшебник Земноморья"       // Price = 70       // Показываем результат на экране       book.Show();  }

Book book = new Book("Волшебник Земноморья", 90);   Так создается объект структуры с оператором new с параметрами.  Вызовется наш конструктор  public Book(String name, int price)  {  ...  }

Создание структуры с оператором new, с параметрами Пример : using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Threading.Tasks;   namespace ConsoleApplication1   {         public struct  Book         {             // members              public string Name;             public int Price ;             // constructor public Book(String name, int price)             {                  Name = name;                  Price = price;   }      

Создание структуры с оператором new, с параметрами

Пример :

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  using System.Threading.Tasks;  namespace ConsoleApplication1  {        public struct  Book        {            // members             public string Name;            public int Price ;            // constructor

public Book(String name, int price)            {                 Name = name;                 Price = price;   }  

 

            // methods              public void Show()             {                  Console.WriteLine(

            // methods             public void Show()            {                 Console.WriteLine("Название книги {0}, Цена {1}", Name, Price);            }       }         class  Program        {            static void Main(string[] args)            {      // создаем объект структуры с оператором new с параметрами                  Book book = new Book("Волшебник Земноморья", 90);                   // наш конструктор установит значения                 // Name = "Волшебник Земноморья "                 // Price = 90                 // Показываем результат на экране                  book.Show();            }       } }

Структура не поддерживает наследование. Структура может наследоваться только от interface Пример структуры: наследование от interface  using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Threading.Tasks;   namespace ConsoleApplication1   {         interface   IBook         {             void Show();       }          public  struct   Book  : IBook        {             // members             public string Name;             public int Price; 

Структура не поддерживает наследование.

Структура может наследоваться только от interface

Пример структуры: наследование от interface

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  using System.Threading.Tasks;  namespace ConsoleApplication1  {        interface   IBook        {            void Show();

    }        public  struct   Book  : IBook       {            // members            public string Name;            public int Price; 

      public  struct Book : IBook           {             // members             public string Name;             public int Price;              // constructor             public Book(String name, int price)             {                  Name = name;                  Price = price;             }              // methods             public void Show()             {                  Console.WriteLine(

      public  struct Book : IBook         {            // members            public string Name;            public int Price;            // constructor            public Book(String name, int price)            {                 Name = name;                 Price = price;            }            // methods            public void Show()            {                 Console.WriteLine(" Название книги {0}, Цена {1}", Name, Price);            }       }  

class  Program         {             static void Main(string[] args)             {                  // создаем  объект  структуры  с  оператором new с  параметрами                    IBook  book = new  Book (

class  Program        {            static void Main(string[] args)            {                 // создаем объект структуры с оператором new с параметрами                   IBook  book = new  Book (" Волшебник Земноморья ", 70);                 // Показываем результат на экране                  book.Show();

          }       }  } 

 Модификаторы доступа для методов, свойств, полей структуры в C#  Поля, методы, свойства в структуре имеют модификаторы доступа.    Модификаторы доступа  позволяют задать область видимости.   То есть область видимости в которой можно употреблять данную переменную или метод.  p ublic  -  Публичный член структуры.   Такой член структуры доступен из любого места в коде.  private - Закрытый член структуры.   Такой член структуры   не доступен  для объекта структуры. Такой член структуры доступен только для методов структуры. 

Модификаторы доступа для методов, свойств, полей структуры в C#

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

p ublic - Публичный член структуры.  Такой член структуры доступен из любого места в коде.

private - Закрытый член структуры.  Такой член структуры   не доступен  для объекта структуры. Такой член структуры доступен только для методов структуры. 

Пример :   нет ошибок компиляции    struct  Book    {        // поле структуры        public string Name;        // метод структуры        public string GetInfo()        {             return 

Пример :   нет ошибок компиляции   

struct  Book   {       // поле структуры       public string Name;       // метод структуры       public string GetInfo()       {            return "Название книги " + Name; // получаем значение из поля структуры       }  }  class  Program   {       static void Main(string[] args)       {            // создаем объект структуры            Book book1 = new Book();            // устанавливаем значение для объекта структуры            book1.Name = "aaa";            // вызываем метод GetInfo у объекта структуры            string str1 = book1.GetInfo();       }  }

Пример   2 ошибки компиляции    struct  Book    {        // поле структуры        private string Name;        // метод структуры        private string GetInfo()        {             return 

Пример   2 ошибки компиляции   

struct  Book   {       // поле структуры       private string Name;       // метод структуры       private string GetInfo()       {            return "Название книги " + Name; // получаем значение из поля структуры       }  }  class  Program   {       static void Main(string[] args)       {            // создаем объект структуры            Book book1 = new Book();            // устанавливаем значение для объекта структуры            book1.Name = "aaa"; // Ошибка компиляции! Book.Name is inaccessible due to its protection level            // вызываем метод GetInfo у объекта структуры             string str1 = book1.GetInfo(); //  Ошибка компиляции ! Book.GetInfo() is inaccessible due to its protection level       }  }

 Если не указать модификатор доступа, то по умолчанию ему будет присвоен  private .  Модификаторы доступа структуры в C#  Структуры имеют  модификаторы доступа .   Модификаторы доступа  позволяют задать область видимости.  Public - Общедоступная структура. Такая структура доступна из любого места в коде, а также из других программ и сборок.   Пример   public  struct Book   {       ... }     Internal - Структура доступна из любого места кода в той же сборке, однако она недоступна для других программ и сборок.   Пример   internal  struct Book   {       ...  }

Если не указать модификатор доступа, то по умолчанию ему будет присвоен  private

Модификаторы доступа структуры в C#

Структуры имеют  модификаторы доступаМодификаторы доступа  позволяют задать область видимости.

Public - Общедоступная структура. Такая структура доступна из любого места в коде, а также из других программ и сборок.  Пример  public  struct Book  {      ... }  

Internal - Структура доступна из любого места кода в той же сборке, однако она недоступна для других программ и сборок.  Пример  internal  struct Book  {      ...  }

 Не указав модификатор доступа  структуре, по умолчанию будет присвоен  internal .    Главное отличие структуры от класса это то что : Объект структуры содержит копию объекта (не ссылку)  Когда одна структура присваивается другой, создается копия объекта (не ссылка).  Переменная структуры это переменная типа.   Переменная типа содержит данные, а не ссылку.   В примере переменная  b2  и  b1  хранят отдельно данные   Сами данные хранятся в стэке.  Пример: struct  Book    {        public string  Name ;   } 

Не указав модификатор доступа  структуре, по умолчанию будет присвоен  internal .  

Главное отличие структуры от класса это то что : Объект структуры содержит копию объекта (не ссылку)

Когда одна структура присваивается другой, создается копия объекта (не ссылка).

Переменная структуры это переменная типа.  Переменная типа содержит данные, а не ссылку.  В примере переменная  b2  и  b1  хранят отдельно данные  Сами данные хранятся в стэке. Пример:

struct  Book   {       public string  Name ;  } 

class  Program    {        static void  Main (string[] args)        {             Book  b1  = new Book();              b1.Name = 

class  Program   {       static void  Main (string[] args)       {            Book  b1  = new Book();             b1.Name = "Book1" ;            Book  b2  =  b1 ;             b2.Name = "Book2" ;            // b1.Name "Book1"            // b2.Name "Book2"       }  }

 Для чего нужны структуры?  Возникает вопрос зачем в C# нужна структура, если она обладает более скромными возможностями, чем класс? Ответ на этот вопрос заключается в повышении эффективности и производительности программ.    Из соображений производительности лучше использовать структуры для небольших типов данных.   Структуры относятся к типам значений, и поэтому ими можно оперировать непосредственно, а не по ссылке. Следовательно, для работы со структурой вообще не требуется переменная ссылочного типа, а это означает в ряде случаев существенную экономию оперативной памяти.   Доступ к структуре осуществляется непосредственно , а к объектам — по ссылке , поскольку классы относятся к данным ссылочного типа. Косвенный характер доступа к объектам подразумевает дополнительные издержки вычислительных ресурсов на каждый такой доступ, тогда как обращение к структурам не влечет за собой подобные издержки.

Для чего нужны структуры?

Возникает вопрос зачем в C# нужна структура, если она обладает более скромными возможностями, чем класс? Ответ на этот вопрос заключается в повышении эффективности и производительности программ.  Из соображений производительности лучше использовать структуры для небольших типов данных.  Структуры относятся к типам значений, и поэтому ими можно оперировать непосредственно, а не по ссылке. Следовательно, для работы со структурой вообще не требуется переменная ссылочного типа, а это означает в ряде случаев существенную экономию оперативной памяти.  Доступ к структуре осуществляется непосредственно , а к объектампо ссылке , поскольку классы относятся к данным ссылочного типа. Косвенный характер доступа к объектам подразумевает дополнительные издержки вычислительных ресурсов на каждый такой доступ, тогда как обращение к структурам не влечет за собой подобные издержки.

-75%
Курсы повышения квалификации

Организация и сопровождение олимпиадной деятельности учащихся

Продолжительность 72 часа
Документ: Удостоверение о повышении квалификации
4000 руб.
1000 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Структуры в языке C# (142 KB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт

Вы смотрели