.net 泛型的有效重载
我的问题一半是风格,一半是功能。我正在重写一个库并尽可能地压缩它。(它采用一个路径并将值读入ByRef变量中。)以前它是这样的:.net 泛型的有效重载,.net,generics,overloading,.net,Generics,Overloading,我的问题一半是风格,一半是功能。我正在重写一个库并尽可能地压缩它。(它采用一个路径并将值读入ByRef变量中。)以前它是这样的: 公共子读取(ByVal名称作为字符串,ByRef值(,)作为整数) 公共子读取(ByVal名称为字符串,ByRef值(,)为长) 等等等等。。。其中大约有30个,包括标量版本。需要更新 每个方法都按类型和等级重载。我正在用泛型重做这个系统,但我遇到了一个问题。以下方法将不会编译: Public Sub-Read(Of T)(ByVal名称作为字符串,ByRef值作为T
公共子读取(ByVal名称作为字符串,ByRef值(,)作为整数)
公共子读取(ByVal名称为字符串,ByRef值(,)为长)
等等等等。。。其中大约有30个,包括标量版本。需要更新
每个方法都按类型和等级重载。我正在用泛型重做这个系统,但我遇到了一个问题。以下方法将不会编译:
Public Sub-Read(Of T)(ByVal名称作为字符串,ByRef值作为T)
Public Sub-Read(Of T)(ByVal名称作为字符串,ByRef值作为T())
Public Sub-Read(Of T)(ByVal名称作为字符串,ByRef值作为T(,))
Public Sub-Read(Of T)(ByVal名称为字符串,ByRef值为T(,))
很明显为什么它不会编译;类型“T”很容易被视为数组,编译器不知道是选择第一个重载还是第二个重载。(注意:如果没有重载读取方法的标量版本,则此系统的工作方式与您预期的一样。)
所以,我留下了一个难题。我不知道设计这些重载的最佳方法,因此我使用最少的代码,同时使用该库与现有代码保持尽可能多的向后兼容性。(我们严格在内部使用它,因此我可以使用我的库更改任何代码,但我宁愿尽可能保持签名不变。)
基本上,有没有一种方法可以像我所展示的那样设计我的重载?我可以明确地告诉编译器我希望top重载只用于标量输入吗?如果不是,最好的设计是什么?我愿意接受任何有创意的想法
谢谢您可以尝试的一件事是使您的第一个重载只接受结构(如果您在本例中只使用数值) 也许这可以进行重载选择,因为数组不是结构 要做的另一件事,有点难看,就是让所有数组重载使用不同的名称,标量使用自己的名称。 在scalar版本中,您可以检查
T是否为数组,计算它的维数并调用propper数组重载。这很奇怪,在C#
中,使用.NET 3.5
这不是问题,编译和运行都没有问题。无论如何,试着按照下面的答案做。
Public Sub Read(Of T As Structure)(ByVal name as String, ByRef values As T)