2012-01-19 2 views
2

Можно создать дубликат:
Which parts of C# .NET framework are actually parts of the language?Каковы типы в C#, от которых зависит синтаксис?

Я знаю, что он использует

  • System.Type как в typeof(foo)
  • System.Attribute, потому что вы можете использовать [Foo] вместо [FooAttribute]
  • System.String потому что вы можете написать "bla".ToLower().
  • System.Exception потому что throw obj работает только с этим типом или наследуемыми типами.
  • System.Array явно
  • и все встроенные типы значений int, decimal, bool и т.д.

Есть ли другие?

+2

'' bla "' само является 'System.String'. Все литеральные значения имеют свои собственные типы. – BoltClock

+0

Хорошо, но это существенно отличается, потому что оно выводится из синтаксиса по-другому, чем с помощью 'string'. 'int '- это то же самое, потому что вы можете иметь' i ++ '. 'System.DateTime' не имеет этого свойства. – Sonia

+1

Просто любопытно: почему вы хотите это знать? –

ответ

0

Как я понимаю ваш вопрос, вы хотите создать список предварительно определенных классов, о которых должен знать компилятор C# для поддержки функций языка C#.

Из верхней части моей головы, я хотел бы добавить следующее:

  • System.Object, базовый класс,
  • System.ValueType, из которого все struct сек унаследуют,
  • System.Delegate, базовый класс для типов делегатов.
0

Не уверен, что я полностью понимаю вопрос, но ...

System.IDisposable работает только с using(var myDisposable = new MyDisposable()){...}, где MyDisposable реализует IDisposable.

0

Я добавлю к списку:

IEnumerable, IEnumerable<T>, IEnumerator и IEnumerator<T> в качестве возвращаемого типа метода или свойства с yield break и/или yield return должен быть один из этих типов, а сгенерированного компилятором класс будет реализовывать его.

Я не согласен с логикой:

System.Attribute, потому что вы можете использовать [Foo] вместо [FooAttribute]

Как это только некоторые сахара, что означает, что если имя атрибута заканчивается " Атрибут ", и нет другого атрибута, имя которого совпадает с именем без атрибута, тогда вы можете опустить этот бит.System.Attribute все еще является примером, поскольку вы не можете использовать объект для атрибута, если только он не сходит с него.

+0

Спасибо. Что касается «Атрибута», ваша логика лучше. – Sonia

2

Это сложный вопрос. Ну, я начну с буквенными значениями, которые вы можете написать в исходном коде, который не требует оценки во время выполнения:

  • струнного "String"
  • полукокса 'c'
  • РЕАЛ decimal типов значений, float, double
  • ИНТЕГРАЛ int типы значений, uint, long, ulong (short, ushort, byte и sbyte также поддерживаются ключевые слова, но они требуют отливки, в отличие от этих четырех)
  • bool (true | false) (также неявно используется в оценках, таких как a == b или c < d)
  • null буквального (не на самом деле типа, но я положил его здесь, в интересах полноты, так как он может представлять любые типы эталонные.)

Теперь язык конструирует:

  • массивы bool[]char[]float[]и т.д. (поддержка всех типов показано выше, за исключением нуль плюс все определяемые пользователем типы
  • обнуляемых bool?char?float?и т.д. (коробки типы значений, чтобы позволить дополнительную ценность нуль)
  • typeof(T) - как вы сказали, возвращает тип, поэтому с # язык поддерживает тип Type. Кроме того, для каждой ссылки на объект или типа значения вы можете вызвать GetType() на нем, чтобы получить то же самое - это унаследовано от объекта.
  • IEnumerable, IEnumerator, IEnumerable<T> и IEnumerator<T> для Еогеаспа и запроса выражений
  • System.Threading.Monitor для блокировки() заявления
  • Func<T>, Func<T1, T2, ... TN>, Action, Action<T>, Action<T1, T2, ... TN> для лямбда-выражения.
  • IDisposable интерфейс для использования() ЗАЯВЛЕНИЙ
  • Exception класс для улова (ExceptionClassType) {} статьи в отчетности попробовать.

Я буду обновлять больше, когда я думаю о них.

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