Supongamos el siguiente código (por favor leer mi pregunta en los comentarios de código en la clase final):Cómo pasar una clase genérica como un parámetro a un constructor de la clase no genérica
//This is my Generic Class
public class ClientRequestInfo<K, V>
{
public string Id { get; set; }
private Dictionary<K, V> parameters;
public ClientRequestInfo()
{
parameters = new Dictionary<K, V>();
}
public void Add(K key, V value)
{
parameters.Add(key, value);
}
}
public class ProcessParameters()
{
private void CreateRequestAlpha()
{
ClientRequestInfo<int, string> info = new ClientRequestInfo<int, string>();
info.Add(1, "Hello");
SynchRequest s = new SynchRequest(info);
s.Execute();
}
private void CreateRequestBeta()
{
ClientRequestInfo<int, bool> info = new ClientRequestInfo<int, bool>();
info.Add(1, true);
SynchRequest s = new SynchRequest(info);
s.Execute();
}
}
public class SynchRequest
{
//What type should I put here?
//I could declare the class as SynchRequest<K, V> but I don't want
//To make this class generic.
private ClientRequestInfo<????,?????> info;
private SynchRequest(ClientRequestInfo<?????,?????> requestInfo)
{
//Is this possible?
this.info = requestInfo;
}
public void Execute()
{}
}
¿Por qué no quieres utilizar un SynchRequest genérico? – AnthonyWJones
¿Puedes hablar sobre lo que harías en Execute() con el miembro de información? Esto puede proporcionar una base para una respuesta funcional equivalente. – joshperry
Porque la clase SynchRequest es llamada por otras clases del proyecto y el propósito de SynchRequest es ejecutar el servicio y no proporcionar ningún tipo de información sobre el cliente. También hay clases que usan SynchRequest y no especifican ni requieren ninguna información del cliente. Entonces, no es un buen enfoque hacer que esta clase sea genérica. (SynchRequest tiene otro constructor vacío) – Ioannis