2010-10-11 9 views
5

Vedo caratteristiche del linguaggio come il ciclo foreach di C# (che richiede l'uso di IEnumerable) e la sua sintassi using (che utilizza IDisposable, sapere quale metodo chiamare) e LINQ (che presumo usi anche un mucchio di cose di .NET) . Tutto ciò sembra molto legato al framework .NET. Quindi:Quanto sono separati C# e .NET?

  • Potrebbe C# esistere con un diverso framework? (Già?)
  • In tal caso, in che modo una lingua specifica "foreach loop richiede un'istanza IEnumerable" senza collegarla a un framework.

risposta

6

Il posto migliore per indagare questo è il C# language specification. Ad esempio, nel caso di enumerables, qui alcuni frammenti della spec:

10.14.2 interfacce enumerabili

Le interfacce sono enumerabili l'interfaccia non generico System.Collections. IEnumerable e tutte le istanze dell'interfaccia generica 01.Configurazione.Generico.Numerico. Per brevità, in questo capitolo queste interfacce sono riferimento come IEnumerable e IEnumerable, rispettivamente.

...

10.14.5.1 Il metodo GetEnumerator

Un oggetto enumerabile fornisce una attuazione dei GetEnumerator metodi della IEnumerable e IEnumerable. I due metodi GetEnumerator condividono un comune implementazione che acquisisce e restituisce un oggetto enumeratore disponibili. L'oggetto enumeratore è inizializzato con i valori dell'argomento e il valore dell'istanza salvato quando l'oggetto enumerabile è stato inizializzato, ma altrimenti l'oggetto enumeratore funziona come descritto in §10.14.4.

Questo si lega bene con come queste interfacce sono effettivamente definito nella NET BCL, anche se sarebbe completamente possibile per un diverso quadro (cioè non-.NET) per fornire un'implementazione compatibile simile che un compilatore C# potrebbe quindi targetizzare.

Parti delle specifiche difficili da separare dal.NET framework sono normalmente contrassegnati con:

Nota: questa sezione è applicabile solo all'implementazione Microsoft .NET di C#.

In un'altra nota, foreach in realtà non richiedono IEnumerable; può usare una sorta di 'digitazione anatra', che puoi leggere nella sezione 8.8.4 delle specifiche.

+0

Ah, quindi è davvero tutto sulla * implementazione * della lingua, quindi? – Smashery

+0

@Smashery: Penso che sia meglio pensarlo in termini di implementazione di un compilatore * compatibile *. – Ani

+0

Come una parte, la sintassi LINQ * * non pone alcuna richiesta specifica neanche; come 'foreach', è interamente basato su pattern. Gli alberi delle espressioni sono più dipendenti, ma i dettagli di questa traduzione non sono in ogni caso nelle specifiche. –

3
  1. Sì - Mono è una fonte implementazione cross-piattaforma aperta del framework .Net .
  2. Non sicuro, buona domanda . Mono sostituisce sia il quadro .Net e il CLR, e così questo non è un problema per Mono.
+0

Vero, anche se, come dici tu, Mono è un'implementazione del framework .NET. Non è davvero un quadro diverso. Mi chiedo di più sulla falsariga di "Could C# funziona con qualcosa di così diverso come la libreria Python?" – Smashery

Problemi correlati