Skip to content

Latest commit

 

History

History
59 lines (44 loc) · 7.89 KB

File metadata and controls

59 lines (44 loc) · 7.89 KB

Члены типа

  • Константа - идентификатор, определюящий некоторую постоянную величину. Используются, чтобы упростить чтение кода и предотвратить использоование Magic Numbers. Константы всегда связаны с типом, а не с экземпляром типа, а на логическом уровне константы всегда являются статическими членами;
  • Поле представляет собой значение данных, доступное только для чтения или для чтения/записи. Поле может быть статическим - тогда оно является частью состояния типа. Поле может быть экземплярным (нестатическим) — тогда оно является частью состояния конкретного объекта;
  • Конструктор экземпляров — метод, служащий для инициализации полей экземпляра при его создании.
  • Конструктор типа — метод, используемый для инициализации статических полей типа;
  • Метод представляет собой функцию, выполняющую операции, которые изменяют или запрашивают состояние типа (статический метод) или объекта (экземплярный метод). Методы обычно осуществляют чтение и запись полей типов или объектов.

Метод отличается от процедуры/функции тем, что имеет среди аргументов неявный(скрытый) параметр this, в котором хранится ссылка на экземпляр, который вызвает данный метод.

  • Перегруженный оператор определяет, что нужно проделать с объектом при применении к нему конкретного оператора. Перегрузка операторов не входит в общеязыковую спецификацию CLS, поскольку не все языки программирования ее поддерживают;
  • Оператор преобразования — метод, задающий порядок явного или неявного преобразования объекта из одного типа в другой. Операторы преобразования не входят в спецификацию CLS по той же причине, что и перегруженные операторы;
  • Свойство - это метод, представляющий собой механизм, позволяющий применить простой синтаксис (напоминающий обращение к полям) для установки или получения части логического состояния типа или объекта с контролем логической целостности этого состояния. Свойства бывают необобщенными (распространенный случай) и обобщенными (встречаются редко, в основном в классах коллекций);
  • Событие — механизм статических событий позволяет типу отправлять уведомления статическим или экземплярным методам. Механизм экземплярных (нестатических) событий позволяет объекту посылать уведомление статическому или экземплярному методу. События обычно инициируются в ответ на изменение состояния типа или объекта, порождающего событие. Событие состоит из двух методов, позволяющих статическим или экземплярным методам регистрировать и отменять регистрацию (подписку) на событие. Помимо этих двух методов, в событиях обычно используется поле-делегат для управления набором зарегистрированных методов.
  • Тип позволяет определять другие вложенные в него типы. Обычно этот подход применяется для разбиения большого, сложного типа на небольшие блоки с целью упростить его реализацию.

Независимо от используемого языка программирования, компилятор должен обработать исходный код и создать метаданные и IL-код для всех членов типа. Формат метаданных един и не зависит от выбранного языка программирования — именно поэтому CLR называют общеязыковой исполняющей средой. Метаданные — это стандартная информация, которую предоставляют и используют все языки, позволяя коду на одном языке программирования без проблем обращаться к коду на совершенно другом языке.

Пример использования членов типа (толку от такого кода мало, он тут больше для понимания там, как в коде эти члены типа выглядят):

using System;

public sealed class SomeType {                                 // 1
  // Вложенный класс
  private class SomeNestedType { }                             // 2
  // Константа, неизменяемое и статическое изменяемое поле
  // Constant, read only, and static read/write field
     private const    Int32  c_SomeConstant = 1     ;            // 3
     private readonly String m_SomeReadOnlyField = "2";          // 4
     private static   Int32  s_SomeReadWriteField = 3;           // 5  
     
  // Конструктор типа  static SomeType() { }                     // 6
  // Конструкторы экземпляров  public SomeType(Int32 x) { }      // 7
     public SomeType() { }                                       // 8
     
 
  // Экземплярный и статический методы
     private String InstanceMethod() { return null; }             // 9
     public static void Main() {}                                 // 10
     
  // Необобщенное экземплярное свойство
     public Int32 SomeProp {                                      // 11
         get { return 0; }                                        // 12
         set { }                                                  // 13
     }
     
  // Обобщенное экземплярное свойство
     public Int32 this[String s] {                                // 14
         get { return 0; }                                        // 15
         set { }                                                  // 16
     }
  // Экземплярное событие
     public event EventHandler SomeEvent;                         // 17 
}