Esiste un costrutto in C# che consente di creare una classe anonima implementando un'interfaccia, proprio come in Java?Interfaccia: implementazione della classe anonima in C#?
risposta
Come è già stato detto, no, questo non è possibile. Tuttavia, puoi creare una classe che implementa l'interfaccia desiderata e accetta una lambda nel suo costruttore in modo da poter trasformare un lambda in una classe che implementa l'interfaccia. Esempio:
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);
}
}
Usage (ovviamente non fare nulla utile, ma si ottiene l'idea)
var list = new List<string>() { "a", "c", "a", "F", "A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));
Ooh, un po 'di fantasia! –
questa è la soluzione migliore per questo problema che ho già visto, genio –
soluzione molto interessante. Lo svantaggio principale è che devi creare una classe base per ogni interfaccia. C'è un modo semplice per renderlo generico? –
No. C# non supporta le classi anonime (tranne i tipi anonimi che non possono definire i metodi).
No, un'espressione Lambda non può implementare interfacce aggiuntive rispetto a quelle già esistenti.
Stai anche confrontando le cose sbagliate. Immagino che tu abbia davvero intenzione di chiedere se i tipi anonimi in C# possono implementare interfacce. La risposta è anche no.
- 1. Inizializzazione della classe anonima C++
- 2. Typedef della classe anonima
- 3. Interfaccia/implementazione in ANSI C
- 4. Interfaccia di implementazione C#
- 5. C implementazione proprietà # interfaccia
- 6. implementazione della classe "finale" in C++
- 7. Serializzazione della classe anonima in Java
- 8. scrivere C# implementazione della classe astratta inline?
- 9. Classe anonima in swift
- 10. Funzione implementazione interfaccia
- 11. Java "serializzazione del metodo" della classe anonima
- 12. Implicazioni di efficienza della classe anonima Java
- 13. Come creare un'istanza di interfaccia anonima in Kotlin?
- 14. Implementazione di un'interfaccia anonima in Golang
- 15. Intestazioni C++ - separazione tra interfaccia e dettagli di implementazione
- 16. classe anonimo attuazione interfaccia
- 17. Implementazione classe automatica C++ nell'editor
- 18. Implementazione java pura della classe java.lang.Math
- 19. classe astratta - nasconde implementazione in C++ pratica
- 20. implementazione Singleton classe ereditabile in C#
- 21. Voglio ottenere il nome di interfaccia dalla classe di implementazione
- 22. Iniettare Sia interfaccia e implementazione in AutoFixture
- 23. Quando ho bisogno di una classe anonima in C++?
- 24. classe anonima come parametro generico
- 25. Java Generics: metodo di interfaccia che riceve l'argomento di tipo della classe di implementazione
- 26. C++/CLI classe di interfaccia vs. interfaccia struct
- 27. C++ Implementazione della funzione virtuale?
- 28. Implementazione alternativa della funzione Ackermann in C
- 29. Implementazione di un interfaccia Java in Scala
- 30. Interfaccia C# e implementazione nello stesso file - buona idea?
correlati http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class -implement-an-interface – mcabral
Stai confondendo espressioni lambda (funzioni anonime) con classi anonime. Non ha senso per una funzione implementare le interfacce – dtech