При чтении исходного кода я наткнулся на фрагмент C#, поведение которого запутывает меня. Прежде чем я начну спрашивать, вот адаптированный пример:Внутренняя работа Enum.GetValues ()
Перечисление:
private enum Seasons
{
Spring,
Summer,
Autumn,
Winter
}
Использование:
foreach(Seasons value in Enum.GetValues(typeof(Seasons)))
{
Console.WriteLine(String.Format("{0} {1}", value, (int) value));
}
Результат выглядит следующим образом:
Spring 0
Summer 1
Autumn 2
Winter 3
Мой вопрос:
Как это работает внутри C#? Возвращаемая стоимость от:
Enum.GetValues(typeof(Seasons))
- массив int, заполненный значениями 0-3. Когда он попадает в список Seasons-enum, я сначала ожидаю, что он потерпит неудачу.
Я думаю, так как перечисление является ссылочного типа на String.Format() - аргумент «значение», метод ToString() будет называться, который будет возвращать его имя. Но когда он передается в int, он будет использовать Свойство в этом значении «named» и вернет значение int.
Я буду счастлив, если кто-нибудь скажет мне, как это работает за шторами. Я просмотрел документацию, но пока не могу ее обработать.
Спасибо ...
Спасибо всем за ответы!
Но ... Я бы очень признателен, если бы можно было сказать немного больше о внутренних функциях C#. В Java перечисление будет реальным ссылочным типом, а в памяти оно будет рассматриваться как ссылка, указывающая на другой мир памяти, в котором хранятся целые числа. Очень, очень упрощенно.
--------- -----------------
| | Reference |int Spring |
|Seasons|-------------> |int Summer |
| | |int Autumn |
--------- |int Winter |
-----------------
Мне кажется, что в C# компилятор, передает его что-то вроде общественного сопзЬ (в моем случае, если Int). Пожалуйста, не бросайте камни ...
System.Enum - ссылочный тип, но типы, наследующие от него, являются типами значений. – FSou1