Domanda

Ho una classe chiamata Primes e questo implementa classe GetEnumerator () senza implementare interfaccia IEnumerable.

public class Primes
{
    private long min;
    private long max;

    public Primes()
        : this(2, 100)
    {
    }

    public IEnumerator GetEnumerator()
    {...}

Io non capisco. Mi sto perdendo qualcosa?

È stato utile?

Soluzione

In primo luogo, come altri hanno detto è possibile introdurre i propri metodi senza implementazione delle interfacce in ogni caso - si può scrivere il proprio metodo Dispose senza implementare IDisposable ecc Per le interfacce ben noti Io suggerirei questo è quasi una cattiva idea (come i lettori avrà determinate aspettative), ma è del tutto valido.

Ancora più importante, però, la dichiarazione foreach in C # possono lavoro senza IEnumerable essere coinvolti. Il compilatore fa in modo efficace in fase di compilazione anatra digitando sul nomi GetEnumerator(), Current e MoveNext(). Questo è stato in primo luogo per consentire fortemente tipizzato (e non-boxing) iterazione in C # 1, prima di farmaci generici. Vedere la sezione 8.8.4 della specifica C # 3 per ulteriori dettagli.

Tuttavia, è generalmente una cattiva idea di fare questo ora se non vuole essere in grado di facilità iterare sul contenuto di un'istanza come una collezione - e in effetti io suggerirei IEnumerable<T> attuazione invece di appena IEnumerable.

Altri suggerimenti

Sì, è possibile. addirittura si può utilizzare in foreach. L'unico problema che gli oggetti di questa classe non possono essere gettati al IEnumerable anche se implementare il metodo necessario.

Non c'è ragione per cui è necessario implementare IEnumerable al fine di creare una funzione chiamata GetEnumerator che restituisce un IEnumerator, che significa solo che non sarà in grado di fornire un esempio di quel tipo a qualcosa che si aspetta un IEnumerable.

un'interfaccia assicura un contratto, che non significa che non si può avere un metodo con la stessa firma come uno nell'interfaccia su una classe che non impliment l'interfaccia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top