[英]Generics question (Type parameters vs Constructors)
如果您有一个自定义收集类,可以将单个类的权重分别存储在浮点数/双精度中,如下所示:
1.1, 3.3, 6.6, 4.4, ...
您需要指定它是float还是double并区分水果类型,这样做更好吗:
使用枚举:
FruitList<float, FruitType.Orange>
要么
在构造函数中使用枚举:
FruitList<float> (FruitType.Orange)
要么
使用课程:
FruitList<float, Orange>
要么
在构造函数中使用类:
FruitList<float> (Orange)
让我感到困惑的是,在<>区域中指定这些种类是否有意义(不知道该区域叫什么)?
哪种方法更好,更快,更有效?
顺便说一句,Orange类从来没有在任何地方使用过,如果可以这样指定类型,就写它吧?
编辑:顺便说一句,这只是一个示例案例,而不是实际的案例,但这以一种清晰的方式反映出来。 就像所有的浮点数/双精度数一样,并传递给其他一些方法。 但是这些方法需要知道哪种水果才能正确执行。 水果本身没有任何意义。
FruitList<float>(FruitType.Orange)
可能是解决方法。
float
不能是类型参数以外的任何内容。 水果类型只是一个属性。 创建单独的类型并为其使用类型参数是没有意义的。
首先,枚举值不是类型,因此该示例
FruitList<float, FruitType.Orange>
将无法正常工作。 如果要确保将通用列表静态键入为Orange
,则必须使用此列表
FruitList<float, Orange>
即使您永远不会使用Orange
类。 如我所见,可能不需要,因为您可以在变量名中传达类型:
FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);
取决于您的那个橘子是否像...标签...像颜色一样。 汽车可以是蓝色和红色,但仍可以是“同一辆”汽车。 如果您希望Orange能够做一些特殊的事情,不同于普通水果或苹果,则可以创建一个抽象Fruit类和一个子类Orange,然后使用<>东西。 如果只是标签之类的东西,例如颜色,那么我想枚举就可以了。
我认为通过使用类/结构进行类型检查会更容易。 例如,如果有人尝试将一些苹果类型的水果添加到您的水果清单中,该怎么办? 会变成橙色吗? 是否必须检查水果的水果类型是否为橙色? 如果不是的话会发生什么? 参数异常?
我想我会去上课,<>有点麻烦。 但是就是我。 实际上,如果是我,我想我应该继续使用decimal
表示权重以及需要测量的所有其他内容……然后出现类似(完全错误的语法等,但希望您能理解):
class FruitList<TFruit> where TFruit : Fruit {}
abstract class Fruit {public abstract decimal Weight {get; protected set; }}
class Orange : Fruit { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.