繁体   English   中英

泛型问题(类型参数与构造函数)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM