Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 // final, поэтому нельзя создавать подклассы этого класса

 private String internal;

 private Day(String Day) {internal = Day;} // закрытый конструктор

 public static final Day MONDAY = new Day("MONDAY");

 public static final Day TUESDAY = new Day("TUESDAY");

 public static final Day WEDNESDAY = new Day("WEDNESDAY");

 public static final Day THURSDAY = new Day("THURSDAY");

 public static final Day FRIDAY = new Day("FRIDAY");

}

Как можно видеть из приведенного выше примера, перечисленные константы связаны не с примитивными типами, а с объектными ссылками. Также, поскольку класс определен как

final
, то нельзя создать его подклассы, следовательно, никакие другие классы не могут из него создаваться. Конструктор отмечен как закрытый, поэтому другие методы не могут использовать класс для образования новых объектов. Единственные объекты, которые будут созданы для этого класса, это статические объекты, которые класс формирует для себя при первой ссылке на класс.

Можно согласиться с тем, что хотя концепция достаточно простая, обход включает развитую технику и она может не сразу стать понятной новичку, в конце концов нам требуется только список констант; C#, в противоположность, предоставляет встроенную поддержку перечислении, которая обеспечивает также безопасность типов. Чтобы объявить в C# перечисление, используется ключевое слово

enum
. В своей простейшей форме
enum
может выглядеть как следующий код:

public enum Status {

 Working,

 Complete,

 BeforeBegin

}

В приведенном выше случае первое значение равно 0 и

enum
увеличивает значения.
Complete
будет 1 и т.д. Если по какой-то причине требуется, чтобы
enum
представлял другие значения, можно сделать это, присваивая такие значения следующим образом:

public enum Status {

 Working = 131,

 Complete = 129,

 BeforeBegin = 132

}

Имеется также возможность использовать другие числовые целые типы 'наследуя' от

long
,
short
или
byte
.
int
всегда является типом по умолчанию. Эта концепция проиллюстрирована ниже:

public enum Status : int {

 Working,

 Complete,

 BeforeBegin

}

public enum SmallStatus : byte {

 Working,

 Complete,

 BeforeBegin

}

public enum BigStatus : long {

 Working,

 Complete,

 BeforeBegin

}

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

byte
в C#, например, может содержать 1 байт памяти. Это означает, что
SmallStatus
не может с одержать более 255 констант или задать значение любой своей константы больше 255. Следующий листинг показывает, как можно использовать оператор
sizeof
для идентификации различий между версиями
Status
:

int х = sizeof(Status);

int у = sizeof(SmallStatus);

int Z = sizeof(BigStatus);

Console.WriteLine("Regular size:\t{0}\nSmall size \t{1}\nLarge size:\t{2}", x, y, z);

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

Regular size: 4

Small size: 1

Large size: 8

Структуры

Одним из основных различий между структурой C# (идентифицируемой ключевым словом

struct
) и классом является то, что то умолчанию
struct
передается посредством значения, в то время как объект передается по ссылке. Как хорошо известно, объекты создаются в куче, в то время как переменные, которые на них ссылаются, хранятся в стеке. Структуры, со своей стороны, создаются и хранятся в стеке. Их аналога в Java не существует. Структуры имеют конструкторы и методы, у них могут быть индексаторы, свойства, операторы и даже вложенные типы. С помощью
struсt
создаются типы данных, которые ведут себя таким же образом, как встроенные типы. Ниже приведен пример использования структур:

public struct WroxInt {

 int internalVal;

 private WroxInt(int x) {

internalVal = x;

 }

 public override string ToString {

return Int.ToString(internalVal);

 }

 public static impicit operator WroxInt(int x) {

return new WroxInt(x);

 }

}

public static void UseWroxInt {

  • Читать дальше
  • 1
  • ...
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: