Насколько разделены C # и .NET? - PullRequest
5 голосов
/ 11 октября 2010

Я вижу такие возможности языка, как цикл foreach в C # (который требует использования IEnumerable) и его синтаксис using (который использует IDisposable, зная, какой метод вызывать) и LINQ (который я предполагаютоже использует кучу .NET).Все это кажется очень связанным с .NET Framework.Итак:

  • Может ли C # существовать с другой структурой?(Это уже есть?)
  • Если это так, как язык определяет «циклы foreach требуют экземпляра IEnumerable», не привязывая его к каркасу.

Ответы [ 2 ]

6 голосов
/ 11 октября 2010

Лучшее место для изучения этого - спецификация языка C # .Например, в случае перечислимых, вот некоторые фрагменты из спецификации:

10.14.2 Перечислимые интерфейсы

Перечислимые интерфейсы не являютсяуниверсальный интерфейс System.Collections.IEnumerable и все экземпляры универсального интерфейса System.Collections.Generic.IEnumerable.Для краткости в этой главе эти интерфейсы обозначены как IEnumerable и IEnumerable, соответственно.

...

10.14.5.1 Метод GetEnumerator

Перечислимый объект обеспечивает реализацию методов GetEnumerator интерфейсов IEnumerable и IEnumerable.Два метода GetEnumerator имеют общую реализацию, которая получает и возвращает доступный объект перечислителя.Объект перечислителя инициализируется значениями аргументов и значением экземпляра, сохраненными при инициализации перечислимого объекта, но в противном случае объект перечислителя функционирует, как описано в §10.14.4.

Это хорошо согласуется с тем, какинтерфейсы на самом деле определены в .NET BCL, хотя для другой (т.е. не .NET) инфраструктуры вполне возможно обеспечить аналогичную совместимую реализацию, на которую затем мог бы нацеливаться компилятор C #.*

Части спецификации, которые трудно отделить от .NET framework, обычно помечаются:

Примечание. Этот раздел применим только к реализации Microsoft CNET для C #.

С другой стороны, foreach на самом деле не требует IEnumerable;он может использовать своего рода «типизацию утки», о которой вы можете прочитать в разделе 8.8.4 спецификации.

3 голосов
/ 11 октября 2010
  1. Да - Mono с открытым исходным кодом кросс-платформенная реализация .NET Framework.
  2. Не уверен, хорошо вопрос. Моно заменяет оба .Net Framework и CLR и т. Д. для Моно это не проблема.
...