- Константа - идентификатор, определюящий некоторую постоянную величину. Используются, чтобы упростить чтение кода и предотвратить использоование 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
}