Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Понимание структур в C#: определение, использование и ключевые отличия

Структуры в C#

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

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

Предположим, мы хотим хранить имя и возраст человека. Можно создать две переменные: name и age и сохранить значения.

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


Определение структуры в C#

В C# используется ключевое слово struct для объявления структуры. Например:

struct Employee {
    public int id;
}

Здесь id — это поле внутри структуры. Структура может также содержать методы, индексаторы и многое другое.


Объявление переменной структуры

Прежде чем использовать структуру, нужно создать переменную структуры. Синтаксис:

struct Employee {
    public int id;
}
// объявление emp типа struct Employee
Employee emp;

В примере мы определили структуру Employee и объявили переменную emp этого типа.


Доступ к членам структуры в C#

Доступ к членам структуры осуществляется через оператор точки (.):

Employee emp;
emp.id = 1;

Это присваивает значение 1 полю id структуры Employee.

Примечание: примитивные типы, такие как int, bool и float, являются предопределенными структурами в C#.


Пример: структура в C#

using System;
namespace CsharpStruct {
    // определение структуры
    struct Employee {
        public int id;
        public void getId(int id) {
            Console.WriteLine("ID сотрудника: " + id);
        }
    }
    class Program {
        static void Main(string[] args) {
            // объявление emp типа struct Employee
            Employee emp;
            // доступ и установка поля структуры
            emp.id = 1;
            // доступ к методам структуры
            emp.getId(emp.id);
            Console.ReadLine();
        }
    }
}

Результат

ID сотрудника: 1

Программа создает структуру Employee, устанавливает её поле id и вызывает метод getId для отображения.

Структуру также можно создать с ключевым словом new:

Employee emp = new Employee();

Это вызывает конструктор без параметров и инициализирует все поля значениями по умолчанию.


Конструкторы в структурах C#

Структуры могут определять конструкторы для инициализации полей. Пример:

struct Employee {
    public int id;
    // конструктор
    public Employee(int employeeId) {
        id = employeeId;
    }
}

Примечание: до C# 10 структуры не могли содержать конструкторы без параметров.


Пример: конструктор в структурах C#

using System;
namespace CsharpStruct {
    // определение структуры
    struct Employee {
        public int id;
        public string name;
        // параметризованный конструктор
        public Employee(int employeeId, string employeeName) {
            id = employeeId;
            name = employeeName;
        }
    }
    class Program {
        static void Main(string[] args) {
            // вызов конструктора структуры
            Employee emp = new Employee(1, "Brian");
            Console.WriteLine("Имя сотрудника: " + emp.name);
            Console.WriteLine("ID сотрудника: " + emp.id);
            Console.ReadLine();
        }
    }
}

Результат

Имя сотрудника: Brian
ID сотрудника: 1

В этом примере конструктор присваивает значения всем полям. Неинициализация каждого поля приводит к ошибке компиляции.


Свойства в структурах C#

Структуры могут предоставлять свойства для инкапсуляции. Пример:

using System;
namespace CsharpStruct {
    // определение структуры
    struct Employee {
        public int id;
        // создание свойства
        public int Id {
            get { return id; }
            set { id = value; }
        }
    }
    class Program {
        static void Main(string[] args) {
            Employee emp = new Employee();
            emp.Id = 1;
            Console.WriteLine("ID сотрудника: " + emp.Id);
            Console.ReadLine();
        }
    }
}

Результат

ID сотрудника: 1

Здесь свойство Id обеспечивает контролируемый доступ к полю id.


Разница между классом и структурой в C#

Хотя классы и структуры имеют похожий синтаксис, они принципиально отличаются:

Пример поведения класса (ссылка):

using System;
namespace CsharpStruct {
    class Employee {
        public string name;
    }
    class Program {
        static void Main(string[] args) {
            Employee emp1 = new Employee();
            emp1.name = "John";
            Employee emp2 = emp1;
            emp2.name = "Ed";
            Console.WriteLine("Имя Employee1: " + emp1.name);
            Console.ReadLine();
        }
    }
}

Результат

Имя Employee1: Ed

Пример поведения структуры (значение):

using System;
namespace CsharpStruct {
    struct Employee {
        public string name;
    }
    class Program {
        static void Main(string[] args) {
            Employee emp1 = new Employee();
            emp1.name = "John";
            Employee emp2 = emp1;
            emp2.name = "Ed";
            Console.WriteLine("Имя Employee1: " + emp1.name);
            Console.ReadLine();
        }
    }
}

Результат

Имя Employee1: John

В примере со структурой emp2 получает копию emp1, поэтому изменения emp2 не влияют на emp1.

Эти отличия делают структуры идеальными для небольших, неизменяемых структур данных, которые получают выгоду от размещения в стеке и семантики значений.

Язык C

  1. Освоение структур в C: определение, переменные, доступ и продвинутые примеры
  2. Освоение структур и указателей в C: практическое руководство
  3. Освоение структур в C: передача, возврат и работа по ссылке
  4. Оставайтесь впереди в будущем работы: стратегии преодоления конкуренции
  5. Структуры (struct) в C++: объяснение с практическим примером
  6. Аргументы за модернизацию графиков сотрудников для удержания талантов и продуктивности
  7. Повышение безопасности на рабочем месте: почему регулярные повторные проверки сотрудников важны
  8. 4 проверенные стратегии усиления вовлеченности сотрудников в условиях COVID-19
  9. DVIRC: Алан Шелл повышен до директора по Lean/CI, три новых сотрудника в команде
  10. Аналитика производительности сотрудников: раскрытие инсайтов в эпоху IoT