Структуры (Руководство по программированию на C#)Structs (C# Programming Guide)

Структуры определяются с помощью ключевого слова struct, например:Structs are defined by using the struct keyword, for example:

public struct PostalAddress
{
    // Fields, properties, methods and events go here...
}

Структуры используют большую часть того же синтаксиса, что и классы.Structs share most of the same syntax as classes. Имя структуры должно быть допустимым именем идентификатора C#.The name of the struct must be a valid C# identifier name. Структуры более ограничены по сравнению с классами по следующим причинам.Structs are more limited than classes in the following ways:

  • В объявлении структуры поля не могут быть инициализированы до тех пор, пока они будут объявлены как const или static.Within a struct declaration, fields cannot be initialized unless they are declared as const or static.
  • Структура не может объявлять конструктор без параметров или метод завершения.A struct cannot declare a parameterless constructor (a constructor without parameters) or a finalizer.
  • Структуры копируются при присваивании.Structs are copied on assignment. При присваивании структуры к новой переменной выполняется копирование всех данных, а любое изменение новой копии не влияет на данные в исходной копии.When a struct is assigned to a new variable, all the data is copied, and any modification to the new copy does not change the data for the original copy. Это важно помнить при работе с коллекциями типов значений, такими как Dictionary<string, myStruct>.This is important to remember when working with collections of value types such as Dictionary<string, myStruct>.
  • Структуры являются типами значений, а классы — ссылочными типами.Structs are value types, unlike classes, which are reference types.
  • В отличие от классов структуры можно создавать без использования оператора new.Unlike classes, structs can be instantiated without using a new operator.
  • Структуры могут объявлять конструкторы, имеющие параметры.Structs can declare constructors that have parameters.
  • Структура не может наследовать от другой структуры или класса и не может быть базовой для класса.A struct cannot inherit from another struct or class, and it cannot be the base of a class. Все структуры наследуют непосредственно от ValueType, который наследует от Object.All structs inherit directly from ValueType, which inherits from Object.
  • Структуры могут реализовывать интерфейсы.A struct can implement interfaces.
  • Структура не может быть null, а переменная структуры не может быть назначена null, если переменная не объявлена как тип, допускающий значение null.A struct cannot be null, and a struct variable cannot be assigned null unless the variable is declared as a nullable type.

См. такжеSee also