Ich habe das nächste Szenario:Casting Generisches Typ Basistyp
public class RequestBase { }
public class ResponseBase { }
public interface IService<TRequest, TResponse>
where TRequest : RequestBase where TResponse : ResponseBase
{
TResponse Execute(TRequest request);
}
public class MyRequest : RequestBase { }
public class MyResponse : ResponseBase { }
public class MyService : IService<MyRequest, MyResponse>
{
public MyResponse Execute(MyRequest request)
{
return new MyResponse();
}
}
jetzt bin ich die Schaffung Fabrik, die meinen Dienst schaffen:
class ServicesFactory
{
public IService<RequestBase, ResponseBase> Create()
{
var service = new MyService();
return (IService<RequestBase, ResponseBase>)service;
}
}
Das Problem ist, dass der Gusswurf Ausnahme.
Wie kann ich den abgeleiteten Typ auf den Basistyp umwandeln?
Können Sie ein Tag für die von Ihnen verwendete Sprache hinzufügen? C# vielleicht? –
Wenn Sie alles durch die Basisklassen drängen, gibt es keinen Grund, Generika zu verwenden. Ändern Sie Ihre Erstellungs- oder Fabriksignatur, um Typparameter einzubeziehen, wenn Sie eine statische Typisierung wünschen. Ansonsten können Sie auch einfach das Objekt oder die Basistypen verwenden. –
Dies ist natürlich nur ein vereinfachtes Beispiel für meinen Code, aber ich brauche diese Hierarchie – eitanby