gpt4 book ai didi

c# - 如何将泛型类型指定为泛型方法中的限制

转载 作者:行者123 更新时间:2023-11-30 19:00:44 27 4
gpt4 key购买 nike

我有一个像这样的通用类:

class MyGenericClass<T> { }

另一方面,我有一个聚合器类,用于获取 MyGenericClass 的单例实例。和派生类,其中每个实例由具体类类型和参数类型标识。即 MyGenericClass<int>不同于MyGenericClass<string>来自 MyDerivedGenericClass<int> ;它们每个都有一个实例。

聚合器的主要成员是GetInstanceOf方法,它将返回指定类型的单例实例。问题是我想将类型指定为泛型参数,但我找不到创建类型限制的方法“参数必须是具有任何参数类型的 MyGenericClass(或派生)类型”。简而言之,我想要这样的东西:

T GetInstanceOf<T>() where T : MyGenericClass<> //This does not compile

那么,我能做什么呢?有没有办法指定这样的限制?

编辑 GetInstanceOf<T>方法确实返回 T,而不是 void。

最佳答案

您可能想要创建一个接口(interface),并让您的通用类实现它。 .NET 编译器将 MyGenericClass 和 MyGenericClass 视为完全不同的类。

这将允许你做这样的事情:

void GetInstanceOf<T>() where T : IMyGenericClass

您还可以使用共享基类:

void GetInstanceOf<T>() where T : MyGenericClassBase

最后,您可以尝试向您的方法添加第二个类型参数:

void GetInstanceOf<T, U>() where T: MyGenericClassBase<U>

(我不确定最后一个......我没有方便的编译器来检查它)

参见:http://msdn.microsoft.com/en-us/library/aa479859.aspx#fundamentals_topic12

关于c# - 如何将泛型类型指定为泛型方法中的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com