¿Hay un constructo en C# que le permite crear una clase anónima implementando una interfaz, como en Java?Interface implementando clase anónima en C#?
Respuesta
Como ya se ha indicado, no, esto no es posible. Sin embargo, puede crear una clase que implemente la interfaz deseada y acepte una lambda en su constructor para que pueda convertir una lambda en una clase que implemente la interfaz. Ejemplo:
public class LambdaComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, T, bool> _lambdaComparer;
private readonly Func<T, int> _lambdaHash;
public LambdaComparer(Func<T, T, bool> lambdaComparer) :
this(lambdaComparer, EqualityComparer<T>.Default.GetHashCode)
{
}
public LambdaComparer(Func<T, T, bool> lambdaComparer,
Func<T, int> lambdaHash)
{
if (lambdaComparer == null)
throw new ArgumentNullException("lambdaComparer");
if (lambdaHash == null)
throw new ArgumentNullException("lambdaHash");
_lambdaComparer = lambdaComparer;
_lambdaHash = lambdaHash;
}
public bool Equals(T x, T y)
{
return _lambdaComparer(x, y);
}
public int GetHashCode(T obj)
{
return _lambdaHash(obj);
}
}
Uso (obviamente sin hacer nada útil, pero usted consigue la idea)
var list = new List<string>() { "a", "c", "a", "F", "A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));
Ooh, ¡un poco sofisticado! –
esta es la mejor solución para este problema que he visto hasta ahora, genio –
solución muy buena. El principal inconveniente es que debe crear una clase base para cada interfaz. ¿Hay alguna forma simple de hacerlo genérico? –
No. C# no admite clases anónimas (excepto los tipos anónimos que no pueden definir métodos).
No, una Expresión Lambda no puede implementar ninguna interfaz adicional de la que ya tiene.
También está comparando cosas equivocadas. Supongo que realmente quiso preguntar si los tipos anónimos en C# pueden implementar interfaces. La respuesta a eso también es no.
- 1. cruce de clase anónima
- 2. Inicialización de clase anónima C++
- 3. ¿Cuándo necesito una clase anónima en C++?
- 4. Implementando interfaces en C++
- 5. ¿Puede una clase anónima de C# implementar una interfaz?
- 6. Interface versus clase concreta
- 7. Anotar clase interna anónima
- 8. Construcción de clase anónima
- 9. clase anónima interfaz
- 10. Implementando la interfaz C#
- 11. ¿Cómo nueva clase anónima dinámica?
- 12. acceso "este" de Java clase anónima
- 13. Clase interna privada sintetiza clase anónima inesperada
- 14. Actualizar clase UIView en Interface Builder
- 15. ZBarReaderView clase desconocida en Interface Builder archivo
- 16. Objective-C: ¿Directiva de clase antes de @interface?
- 17. Clase interna anónima vacía en java
- 18. Serialización de clase anónima en Java
- 19. ¿Variables/métodos privados en la clase anónima?
- 20. java.lang.NoClassDefFoundError: en la clase interna anónima
- 21. C# implementación anónima de la interfaz (o clase abstracta)
- 22. java.lang.IncompatibleClassChangeError: Implementando la clase Mongo
- 23. C# interface herencia
- 24. Implementando algunos métodos de una clase de interfaz-C#
- 25. implementando la interfaz java con la clase scala - tipo problema
- 26. implementando erosión, dilatación en C, C++
- 27. Acceso campo de una clase anónima exterior de una clase anónima interna
- 28. Anónimo extendiendo una clase e implementando una interfaz al mismo tiempo?
- 29. Variable de clase definida en @implementation en lugar de @interface?
- 30. implementando un operador de conversión en una clase abstracta genérica
relacionados http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class -implement-an-interface – mcabral
Estás confundiendo expresiones lambda (funciones anónimas) con clases anónimas. No tiene sentido que una función implemente interfaces – dtech