En algún método de clase, A, necesito llamar a un método de biblioteca B, que toma como IProgress<Object>
como parámetro.C# ¿Es posible suministrar una lambda cuando se requiere una interfaz?
Normalmente, podría implementar IProgress<Object>
como parte de la clase donde reside A, y luego pasar "esto" al método B. O tal vez podría crear una nueva clase cuyo único propósito es implementar IProgress<Object>
y manejarlo correctamente-- entonces en este caso crearía una instancia de esa clase y la pasaría a B.
Pero lo que realmente quiero es que mi implementación de IProgress<Object>
aparezca dentro del método en el que llamo B, entonces que hay menos desconexión visual entre el código de llamada y la implementación IProgress<Object>
. (Considero que mi implementación de IProgress es una especie de detalle privado y no compartido del método de llamada y, por lo tanto, no quiero que mi implementación de IProgress<Object>
esté en un método completamente separado de tal vez una clase completamente distinta).
Lo que he estado tratando de hacer es usar una lambda en la que definiré mi corta el progreso manipulación, y entonces de alguna manera pasar este lambda a B, de esta manera:
method in class A {
...
Action<Object> Report = (m) => { // do something useful with m };
B(Report)
}
method B(IProgress<Object> reporter) {
reporter.Report(some object)
}
Por supuesto, sé por qué esto no funcionará como está: B quiere un objeto que implementa IProgress<Object>
y en su lugar le entrego un objeto de Acción.
¿Hay alguna manera de lograr lo que estoy tratando de lograr? (Es decir, tener mi aplicación si IProgress<Object>
aparecer dentro método A?
C# lambdas son delegados anónimos . Lo que necesitas es un tipo anónimo que implemente la interfaz. Consulte [esta pregunta] (http://stackoverflow.com/questions/191013/can-a-c-sharp-anonymous-class-implement-an-interface) para obtener algunas soluciones sobre los tipos anónimos de propiedades únicas que proporciona C#. –