Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以让泛型类具有多个签名_C#_Generics - Fatal编程技术网

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来说太主观了。谢谢,我感谢你的帮助;我将尝试寻找另一个论坛来讨论实现的主观方面。