泛型或非泛型

Joa*_*nge 6 .net c# generics

基本上我有一个包含不同水果的自定义List类.假设每个水果都有一个存储在列表中的ID号.

有没有更好的:

new AppleList();
new OrangeList();
new LemonList();
Run Code Online (Sandbox Code Playgroud)

要么

new FruitList<Fruit.Apple>();
new FruitList<Fruit.Orange>();
new FruitList<Fruit.Lemon>();
Run Code Online (Sandbox Code Playgroud)

需要考虑的事项:

  • 所有ID都是int类型.
  • 水果的类型不会影响List本身的实现.它只会被列表的客户端使用,就像外部方法一样.

我想使用更清晰,更好的设计,更快,更高效等的那个.此外,如果以上2种技术不是最好的,请提出您的想法.

编辑:如果不清楚,顺便说一句水果是一个枚举.

Joh*_*han 10

使用组合:

public class AppleList : FruitList<Apple> { ... }
public class OrangeList : FruitList<Orange> { ... }
public class LemonList : FruitList<Lemon> { ... }
Run Code Online (Sandbox Code Playgroud)

将通用逻辑放在基类列表中:

public class FruitList<T> : List<T>
    where T : IFruit 
{ ... }
Run Code Online (Sandbox Code Playgroud)


Max*_*ing 9

如果您使用泛型,是否有创建FruitList类型的目的?你能用List吗?

性能没有太大差异,所以我说为什么要创建三个不同的类,当一个人做同样的事情时?使用通用解决方案.


Jar*_*Par 7

维护1个通用列表要比3个非泛型版本容易得多.如果你真的喜欢AppleList名称,你总是可以使用using技巧来命名一个通用列表

using AppleList=Fruit.FruitList<Fruit.Apple>
Run Code Online (Sandbox Code Playgroud)


Jon*_*len 3

\n

\xe2\x80\xa2所有ID都是int类型。

\n\n

\xe2\x80\xa2水果的类型不会影响List本身的实现。它只会被列表的客户端使用,比如外部方法等。

\n
\n\n

鉴于这两个事实,我不会为泛型而烦恼。我会在 FruitList 上放置一个普通属性来指示它是哪种类型的水果。

\n