betacode

Руководство C# Structure

  1. Что такое Struct?
  2. Struct по сравнению с Class
  3. Constructor в Struct
  4. Методы и свойства в Struct
  5. Indexer и Event в Struct

1. Что такое Struct?

В C# Struct (структура) является особым видом значения, она создает переменную для хранения нескольких отдельных значений, но эти значения связаны друг с другом.
Например, информация о сотруднике включает:
  • Код сотрудника
  • Имя сотрудника
  • Позиция
Вы можете создать 3 переменных для хранения информации сотрудника выше. Однако вы можете создать Struct для хранения всех трех данных в одной переменной.
С# использует ключевое слово struct для объявления struct.
Employee.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    struct Employee
    {
        public string empNumber;
        public string empName;
        public string position;
        public Employee(string empNumber, string empName, string position)
        {
            this.empNumber = empNumber;
            this.empName = empName;
            this.position = position;
        }
    }
}
Пример использования Struct:
EmployeeTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    class EmployeeTest
    {
        public static void Main(string[] args)
        {
            Employee john = new Employee("E01","John", "CLERK");
            Console.WriteLine("Emp Number: " + john.empNumber);
            Console.WriteLine("Emp Name: " + john.empName);
            Console.WriteLine("Emp Position: " + john.position);
            Console.Read();
        }
    }
}
Запуск примера:
Emp Number: E01
Emp Name: John
Emp Position: CLECK

2. Struct по сравнению с Class

Struct обычно используется для создания объекта для хранения значений, тогда как класс используется более разнообразно.
  • Struct не позволяет наследовать, он не может расширяться из определенного класса или struct.
  • Struct не позволяет реализовать Interface.
Одна из struct, часто используемых в C#, является DateTime, структура, описывающая дату и время. Вы можете больше узнать об использовании даты и времени в C# по ссылке:
Если struct появляется как параметр в методе, он передается как значение. Между тем, если класс появляется как параметр в методе, он передается как ссылка (reference).
MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    class MyClass
    {
       public string name = "Abc";
       public MyClass(string name)
       {
           this.name = name;
       }
    }
}
MyStruct.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    struct MyStruct
    {
       public string name;

       public MyStruct(string name)
       {
           this.name = name;
       }
    }
}
MyTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    class MyTest
    {
        private static void passToMe(MyClass myClass, MyStruct myStruct)
        {
            // Поменять значение поля name.
            myClass.name = "New Name";
 
            // Поменять значение поля name.
            myStruct.name = "New Name";
        } 
        public static void Main(string[] args)  
        {
            MyClass myClass = new MyClass("Abc");
            MyStruct myStruct = new MyStruct("Abc");

            Console.WriteLine("Before pass to method");
            Console.WriteLine("myClass.name = " + myClass.name);// Abc
            Console.WriteLine("myStruct.name = " + myStruct.name);// Abc 
            Console.WriteLine("Pass to method");

            // 'myStruct' передает методу копию.
            // (Не оригинальный объект).
            passToMe(myClass, myStruct); 
            Console.WriteLine("myClass.name = " + myClass.name); // New Name
            Console.WriteLine("myStruct.name = " + myStruct.name);// Abc 
            Console.Read(); 
        } 
    } 
}
Запуск примера:
Before pass to method
myClass.name = Abc
myStruct.name = Abc
Pass to method
myClass.name = New Name
myStruct.name = Abc

3. Constructor в Struct

Struct может иметь конструкторы (constructors), но не имеет деструктора (destructor).
Здесь приведены несколько замечаний для Constructor:
  • Вы не можете написать конструктор по умолчанию (без параметров) для struct.
  • В конструкторе вы должны присвоить значения всем полям struct.

4. Методы и свойства в Struct

Struct может иметь методы и свойства (Property), а так как Struct не наследует, следовательно, все его методы и свойства не могут быть абстрактными (abstract).
Book.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStructureTutorial
{
    struct Book
    {
        private string title;
        private string author;

        // Property
        public string Title
        {
            get
            {
                return this.title;
            }
            set
            {
                this.title = value;
            }
        }
        // Property
        public string Author
        {
            get
            {
                return this.author;
            }
        }
        // Constructor.
        public Book(string title, string author)
        {
            this.title = title;
            this.author = author;
        }
        // Method.
        public string GetInfo()
        {
            return "Book Title: " + this.title + ", Author: " + this.author;
        }
    }
}

5. Indexer и Event в Struct

Struct может содержать Indexer и Event, подробнее о Indexer и Event можно узнать по ссылке:

Pуководства C#

Show More