【发布时间】:2009-09-29 17:02:05
【问题描述】:
假设以下代码(请阅读我在最后一课代码 cmets 中的问题):
//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()
{}
}
【问题讨论】:
-
为什么不想使用通用的同步请求?
-
你能和 info 成员谈谈你在 Execute() 中会做什么吗?这可以为功能等效的答案提供基础。
-
因为 SynchRequest 类被项目的其他类调用,而 SynchRequest 的目的是运行服务,不提供任何关于客户端信息的类型。还有一些类使用 SynchRequest 并且不指定或要求任何客户端信息。因此,使此类通用化并不是一个好方法。 (SynchRequest 有另一个空的构造函数)
-
execute 方法从clientRequestInfo 类中读取参数并将请求发送到服务器。所以它会将类clientRequestInfo序列化并发送到服务器。
-
我很惊讶没有人提到工厂方法。创建一个类似于命名构造函数的静态方法。
标签: c# generics parameter-passing