2016-07-15 3 views
0

Почему меняется enum на E num вызывает ошибки компиляции?Почему «Enum» не удается скомпилировать, когда «enum» преуспевает в C# .NET?

Как правило, в C# можно использовать тип C# или его эквивалент .NET.

Пример:.

string jeff = "Atwood"; // string type 
String name = "Jeff"; // System.String 

"string (C# Reference)"
" строки типа представляет собой последовательность из нуля или более символов Юникода
строка является псевдонимом для Строки в. NET Framework."

Следующего приложение .NET консоль успешно для "" перечисления:

using System; 

namespace UnhappyWithSystemEnum 
{ 
    enum FirstEnum { Nothing = 0, Something = 666 }; 

    class CapitalE 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine(FirstEnum.Nothing); 
      Console.WriteLine(FirstEnum.Something); 
      Console.WriteLine("Press ENTER to Exit"); 
      Console.ReadLine(); 
     } 
    } 
} 

выхода:

Nothing 
Something 
Press ENTER to Exit 

Однако изменение" перечисления" в "Е NUM" причины несколько ошибок:

Enum FirstEnum { Nothing = 0, Something = 666 }; 

ошибка:

'invalid-global-code.FirstEnum': 
    property or indexer must have at least one accessor 

Пожалуйста, объясните.

MSDN Ссылки:
"Enum Class"
"enum (C# Reference)"

+1

Ну 'enum' не является псевдонимом для' System.Enum', так как 'string' является псевдонимом для' System.String'. Это больше похоже на 'delegate', который используется для объявления типа делегата, но есть также' System.Delegate'. Ключевые слова не обязательно являются псевдонимами для имен типов. –

ответ

4

Это происходит потому, что строка является псевдонимом для строки, но перечисление не то же самое, как Enum:

Ключевое слово enum определяет новый тип, который является собственностью ited from System.Enum с элементами как статические поля.

enum MyEnum 
{ 
    Member 
} 

является эквивалентом (и я думаю, что это на самом деле реальный генерироваться CIL) из:

public class MyEnum : System.Enum 
{ 
    public static int Member; 
} 

Если вы используете Enum вместо:

Enum MyEnum 
{ 
    Member 
} 

бы как:

StringBuilder MyEnum 
{ 
    Member 
} 

, что явно не имеет смысла для компилятора.

+1

Это больше похоже на 'public const MyEnum Member;'. – PetSerAl

+0

@PetSerAl примерно да, но я думаю, если вы не указали иначе, это: 'public const int Member', так как вы можете анализировать/читать перечисление как целые числа. Я действительно смотрю на код CIL через минуту. –

 Смежные вопросы

  • Нет связанных вопросов^_^