How to pass a Generic class as a Parameter to a non-generic class constructor
c#, generics, parameter-passing
Solution
If you don't want to make `SynchRequestInfo` generic, can you make a non-generic base class for `ClientRequestInfo`? --
public abstract class ClientRequestInfo
{
public abstract void NonGenericMethod();
}
public class ClientRequestInfo<K, V> : ClientRequestInfo
{
public override void NonGenericMethod()
{
// generic-specific implementation
}
}
Then:
public class SynchRequest
{
private ClientRequestInfo info;
private SynchRequest(ClientRequestInfo requestInfo)
{
this.info = requestInfo;
}
public void Execute()
{
// ADDED: for example
info.NonGenericMethod();
}
}
Problem
Assume the following code (Please read my question in the code comments in the final class): ``` //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() {} } ```