Pregunta

Tengo una clase llamada Primes y esta clase implementa GetEnumerator () sin implementar la interfaz IEnumerable.

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

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

    public IEnumerator GetEnumerator()
    {...}

No lo entiendo. Me estoy perdiendo algo?

¿Fue útil?

Solución

En primer lugar, como otros han dicho que puede introducir sus propios métodos sin la implementación de las interfaces de todos modos - usted puede escribir su propio método Dispose sin implementar IDisposable etc. Para las interfaces conocidas me gustaría sugerir esto es casi una mala idea (como lectores tendrá ciertas expectativas), pero es totalmente válida.

Más importante, sin embargo, la declaración foreach en C # puede IEnumerable trabajo sin estar involucrado. El compilador hace efectiva la tipificación de pato en tiempo de compilación en el GetEnumerator() nombres, Current y MoveNext(). Esto fue principalmente para permitir fuertemente mecanografiada (y no el boxeo) iteración en C # 1, antes de que los genéricos. Véase la sección 8.8.4 de la especificación C # 3 para más detalles.

Sin embargo, es generalmente una mala idea hacer esto ahora si no quiere ser capaz de fácil iterar sobre el contenido de una instancia como una colección - y, de hecho me gustaría sugerir IEnumerable<T> implementar vez de poco IEnumerable.

Otros consejos

sí se puede. incluso se puede usar en foreach. El único problema que los objetos de esta clase no se pueden echar a IEnumerable a pesar de que implementan el método necesario.

No hay razón por la que hay que poner en práctica IEnumerable con el fin de crear una función llamada GetEnumerator que devuelve un IEnumerator, eso significa solamente que usted no será capaz de suministrar una instancia de ese tipo a algo que espera un IEnumerable.

una interfaz asegura un contrato, eso no significa que no se puede tener un método con la misma firma como uno en la interfaz en una clase que no impliment la interfaz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top