如何在非泛型静态类的多个方法中使用相同的泛型类型

用户2877820

我正在尝试创建一个静态(因此是非通用)类,其中包含一个名为

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

如何在派生类型中使用泛型方法

来自分类Dev

如何在方法参数中使用泛型类型投影?

来自分类Dev

如何在派生类型中使用泛型方法

来自分类Dev

如何在扩展方法中使用泛型类型成员?

来自分类Dev

如何在基类的方法中使用泛型指定out参数的类型?

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

在Java中使用静态方法创建类型的泛型实例

来自分类Dev

在泛型类中使用匿名类型

来自分类Dev

如何在C#中的泛型类中使用泛型类的对象?

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

如何在Nim中使用默认泛型类型?

来自分类Dev

如何在类中使用Comparable作为泛型参数

来自分类Dev

如何在TypeScript中使用泛型检测类实例

来自分类Dev

如何在参数需要类中使用泛型

来自分类Dev

如何使用类型的辅助类泛型

来自分类Dev

实现一个非泛型的静态Factory方法,以从字符串输入创建各种泛型类(不使用“动态”类型)

来自分类Dev

如何在多个泛型类型中使用关键字“ where”?

来自分类Dev

如何获取在数组的方法中使用的泛型类型?

来自分类Dev

如何在HashMap中使用泛型?

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

方法必须在非泛型静态类中定义

来自分类Dev

在具有与非泛型超类同名的泛型类中使用类方法时发生错误

来自分类Dev

从非泛型静态类中的泛型重载方法获取RuntimeMethodInfo

来自分类Dev

泛型类中的泛型静态方法

来自分类Dev

泛型类和静态泛型方法

来自分类Dev

非泛型类的泛型类方法

来自分类Dev

如何在Java方法中使用泛型

Related 相关文章

  1. 1

    如何在类中使用扩展的泛型类型的类型?

  2. 2

    如何在派生类型中使用泛型方法

  3. 3

    如何在方法参数中使用泛型类型投影?

  4. 4

    如何在派生类型中使用泛型方法

  5. 5

    如何在扩展方法中使用泛型类型成员?

  6. 6

    如何在基类的方法中使用泛型指定out参数的类型?

  7. 7

    如何使用泛型返回泛型类的类类型?

  8. 8

    在Java中使用静态方法创建类型的泛型实例

  9. 9

    在泛型类中使用匿名类型

  10. 10

    如何在C#中的泛型类中使用泛型类的对象?

  11. 11

    如何在泛型方法中获取泛型类型的类实例

  12. 12

    如何在Nim中使用默认泛型类型?

  13. 13

    如何在类中使用Comparable作为泛型参数

  14. 14

    如何在TypeScript中使用泛型检测类实例

  15. 15

    如何在参数需要类中使用泛型

  16. 16

    如何使用类型的辅助类泛型

  17. 17

    实现一个非泛型的静态Factory方法,以从字符串输入创建各种泛型类(不使用“动态”类型)

  18. 18

    如何在多个泛型类型中使用关键字“ where”?

  19. 19

    如何获取在数组的方法中使用的泛型类型?

  20. 20

    如何在HashMap中使用泛型?

  21. 21

    如何在Scala中使用泛型

  22. 22

    如何在Scala中使用泛型

  23. 23

    方法必须在非泛型静态类中定义

  24. 24

    在具有与非泛型超类同名的泛型类中使用类方法时发生错误

  25. 25

    从非泛型静态类中的泛型重载方法获取RuntimeMethodInfo

  26. 26

    泛型类中的泛型静态方法

  27. 27

    泛型类和静态泛型方法

  28. 28

    非泛型类的泛型类方法

  29. 29

    如何在Java方法中使用泛型

热门标签

归档