Giả sử đoạn mã sau (Vui lòng đọc câu hỏi của tôi trong các ý kiến mã trong lớp cuối cùng):Làm thế nào để vượt qua một lớp Generic như một thông số để một constructor lớp phi generic
//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()
{}
}
Tại sao bạn không muốn sử dụng SynchRequest chung? – AnthonyWJones
Bạn có thể nói về những gì bạn sẽ làm trong Execute() với thành viên thông tin không? Điều này có thể cung cấp một cơ sở cho một câu trả lời tương đương chức năng. – joshperry
Vì lớp SynchRequest được gọi bởi các lớp khác của dự án và mục đích của SynchRequest là chạy dịch vụ và không cung cấp bất kỳ loại nào về thông tin khách hàng. Ngoài ra còn có các lớp học sử dụng SynchRequest và không chỉ định hoặc yêu cầu bất kỳ thông tin khách hàng nào. Vì vậy, không phải là cách tiếp cận tốt để làm cho lớp này chung chung. (SynchRequest có một hàm tạo rỗng) – Ioannis