Aquí es una interfaz, tomado de mi intento de puerto MemBus, un agregador de eventos que mantener, al mundo de Windows en tiempo de ejecución:Los métodos de Windows Runtime no pueden ser genéricos: razones, soluciones alternativas.
public interface ISubscriber
{
IDisposable Subscribe<M>(Action<M> subscription);
#if WINRT
[Windows.Foundation.Metadata.DefaultOverload]
#endif
IDisposable Subscribe(object subscriber);
IObservable<M> Observe<M>();
}
Lo que quiero decir es un error del compilador:
"error WME1031: '
MemBus.ISubscriber.Subscribe<M>(System.Action<M>)
' is a generic method. Windows Runtime methods cannot be generic."
Solo tengo sospechas de por qué este es el caso, si alguien puede aclarar, por favor hazlo.
Mi pregunta principal es: ¿Cómo se supone que debemos ocuparnos de esto al transferir el código al tiempo de ejecución de Windows?
Mucha funcionalidad de nivel superior sucede con los genéricos. De hecho, usamos clases genéricas en Windows Runtime (por ejemplo, List<T>
). ¿Cómo se supone que un componente RT expone los tipos genéricos y, de no ser así, es la única alternativa disponible para volver a las formas de escribir el código .NET 1.1, es decir, el objeto in, object out y do castts?
Estoy marcando esto como una respuesta, ya que estaba pensando en portar. Al portar una biblioteca .NET que estaba destinada a ser consumida principalmente por otros lenguajes .NET, parece tener sentido restringirse a apuntar a C# y omitir el soporte de C++/Javascript a favor de mantener muchas construcciones conocidas por el desarrollador de C# durante muchos años. Cuando se trata de un nuevo desarrollo, la respuesta puede ser diferente. – flq