C# 有没有一种方法可以让泛型类具有多个签名
我有一个带有复杂签名的泛型类,如果所有类型参数都相同,为了方便起见,我想简化它C# 有没有一种方法可以让泛型类具有多个签名,c#,generics,C#,Generics,我有一个带有复杂签名的泛型类,如果所有类型参数都相同,为了方便起见,我想简化它 MyClass<T1, T2, T3, T4> MyClass 如果所有类型参数都是Guid,那么我只想提供一个类型参数,唯一的方法就是定义另一个类 MyClass<T1> : MyClass<T1, T1, T1, T1> MyClass:MyClass 是否有更好的方法实现此功能?最终,除了使用简化签名的功能外,我不希望类之间有任何不同。不。这是唯一的方法。就编译器而言
MyClass<T1, T2, T3, T4>
MyClass
如果所有类型参数都是Guid,那么我只想提供一个类型参数,唯一的方法就是定义另一个类
MyClass<T1> : MyClass<T1, T1, T1, T1>
MyClass:MyClass
是否有更好的方法实现此功能?最终,除了使用简化签名的功能外,我不希望类之间有任何不同。不。这是唯一的方法。就编译器而言,
T1
、T2
、T3
和T4
是不相关的。这是唯一的方法。就编译器而言,T1
、T2
、T3
和T4
是不相关的。不幸的是,编译器通常无法基于其他泛型类型参数推断泛型类型参数。因此,您要么指定全部,要么不指定任何内容。如果引用类,则始终必须指定所有类型参数
但是,编译器可能有机会从传递的参数推断方法的泛型类型参数,因此您可以执行以下操作
public MyClass<T, T, T, T> CreateMyClass<T>(T item)
publicMyClass创建MyClass(T项)
如果您提供这样的API以便用户不必依赖构造函数,那么您可能有机会将显式类型参数保持在最小值。不幸的是,编译器通常无法根据其他泛型类型参数推断泛型类型参数。因此,您要么指定全部,要么不指定任何内容。如果引用类,则始终必须指定所有类型参数 但是,编译器可能有机会从传递的参数推断方法的泛型类型参数,因此您可以执行以下操作
public MyClass<T, T, T, T> CreateMyClass<T>(T item)
publicMyClass创建MyClass(T项)
如果您提供这样的API,这样用户就不必依赖构造函数,那么您可能有机会将显式类型参数保持在最低限度。为特殊对象指定特殊名称有什么问题,这是通过为它创建一个类来专门分配泛型参数?比如
MyGuidClass:MyClass
…你可以将所有的实现放在一个具有4种类型的实现中,另一个将继承所有这些类型,因此除了可能需要的构造函数外,没有新代码。我不想给它一个特殊的名称,因为除了简化的签名,它没有什么特别的。那是有效的吗?给一个特殊的东西起一个特殊的名字有什么问题,这是通过为它创建一个类来专门分配泛型参数?比如MyGuidClass:MyClass
…你可以将所有的实现放在一个具有4种类型的实现中,另一个将继承所有这些类型,因此除了可能需要的构造函数外,没有新代码。我不想给它一个特殊的名称,因为除了简化的签名之外,它没有什么特别之处。这是有效的吗?如果这是唯一的方法,它会被认为是一种不好的做法吗?我已经用复杂签名在类中定义了所有的功能,简化类不会有任何额外的功能。好吧,就观点而言,如果,如你所说,它没有什么特别之处,那么是的。但我不同意它没有什么特别之处。如果你能说出它的名字,它很特别MyHomogeneousClass:MyClass
或MyGuids:MyClass
都很好。它是一个通用的MVC控制器,类型参数是常见操作的ViewModel类型,在大多数情况下,常见操作使用相同的ViewModel,但出于灵活性,我希望能够为每个动作定义不同的ViewModel类型。我坚持我所说的。不需要任何额外的功能就可以让它与众不同。你可以通过限制功能使事情变得特别。这可能有助于将MyClass
实例放置在列表中,并且您希望约束T或类似的内容。无论如何,这对StackOverflow来说太主观了。谢谢,我感谢你的帮助;我会试着找另一个论坛来讨论实施的主观方面。如果这是唯一的方法,这会被认为是一种不好的做法吗?我已经用复杂签名在类中定义了所有的功能,简化类不会有任何额外的功能。好吧,就观点而言,如果,如你所说,它没有什么特别之处,那么是的。但我不同意它没有什么特别之处。如果你能说出它的名字,它很特别MyHomogeneousClass:MyClass
或MyGuids:MyClass
都很好。它是一个通用的MVC控制器,类型参数是常见操作的ViewModel类型,在大多数情况下,常见操作使用相同的ViewModel,但出于灵活性,我希望能够为每个动作定义不同的ViewModel类型。我坚持我所说的。不需要任何额外的功能就可以让它与众不同。你可以通过限制功能使事情变得特别。这可能有助于将MyClass
实例放置在列表中,并且您希望约束T或类似的内容。无论如何,这对StackOverflow来说太主观了。谢谢,我感谢你的帮助;我将尝试寻找另一个论坛来讨论实现的主观方面。