我正在尝试创建一个静态(因此是非通用)类,其中包含一个名为
Initialize<T>();
此方法将在启动时调用,并将定义类的泛型类型。所以我希望能够将其他方法的返回值设置为与T相同的类型。
结果应该是这样的:
public static class ServiceClientBase
{
private static IRestClient _client;
public static void Initialize<T>(T restClient)
{
_client = restClient;
}
public static T GetClient()
{
return (T)_client;
}
}
显然这不起作用,因为 GetClient() 不知道类型 T。但是 GetClient 中的 T 应该等于 Initialize 中的 T。
有没有办法做到这一点?如果没有,是否有一种有用的模式来完成类似的事情?
非常感谢!
我认为您在这里做出了错误的假设:
我正在尝试创建一个静态(因此是非通用)类
静态类绝对可以是通用的。我相信你只是想要:
public static class ServiceClientBase<T> where T : IRestClient
{
private static T _client;
public static void Initialize(T restClient)
{
_client = restClient;
}
public static T GetClient()
{
return _client;
}
}
然后你会使用:
ServiceClientBase<Foo>.Initialize(client);
...
Foo foo = ServiceClientBase<Foo>.GetClient();
如果你Initialize
用两种不同的类型调用两次,你的非通用版本会导致问题——你只有一个字段。对于泛型类型,每个构造类型都有一个字段。
作为旁注,ServiceClientBase
静态类的名称非常奇怪 - 听起来它应该是某些东西的基类,但没有任何东西可以从静态类派生。
其次,这只是一个美化的单例模式。我鼓励您研究依赖注入,而不是作为处理此类事情的更好方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句