Pergunta

Se você tem uma classe de coleção personalizada que armazena os pesos de uma única classe de frutas individualmente em carros alegóricos / double, assim:

1.1, 3.3, 6.6, 4.4, ...

e você precisa especificar se é float ou double e para diferenciar o tipo de fruto, é melhor fazê-lo como este:

Usando uma enumeração:

FruitList<float, FruitType.Orange>

ou

Usando um enum no construtor:

FruitList<float> (FruitType.Orange)

ou

Usando uma classe:

FruitList<float, Orange>

ou

Usando uma classe no construtor:

FruitList<float> (Orange)

Coisa coisa que me confunde é se especificar este tipo de coisa faz sentido na área <> (não sei o que essa área é chamada)?

Qual é o melhor, mais rápido, a prática mais eficiente?

Btw a classe Laranja nunca é usado em qualquer lugar, só escrevi se isso faria sentido para especificar o tipo assim?

EDIT: BTW este é apenas um exemplo de caso, não o real, mas isso reflete de forma clara. Como se fosse todos os carros alegóricos / duplos e são passados ??para alguns outros métodos. Mas os métodos precisa saber que tipo de fruta para executar corretamente. O fruto si não significam nada.

Foi útil?

Solução

Antes de tudo, valores enum não são tipos, por isso o exemplo

FruitList<float, FruitType.Orange>

não vai funcionar. Se você quiser garantir que a sua lista genérica é staticly digitado para Orange você terá que usar um presente

FruitList<float, Orange>

mesmo que você nunca vai usar a classe Orange. A meu ver, provavelmente não é uma necessidade, já que você pode transmitir digite o nome da variável:

FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);

Outras dicas

FruitList<float>(FruitType.Orange) é provavelmente o caminho a percorrer.

float não pode ser qualquer coisa exceto um parâmetro de tipo. O tipo de fruta é apenas uma propriedade. Não faz sentido criar um parâmetros de tipo e tipo de uso separado para ele.

Depende se que a Orange de vocês só vai ser como um ... tag ... como a cores. Um carro pode ser azul e vermelho e ainda ser "o mesmo" carro. Se você quer a laranja para ser capaz de fazer algo especial, diferente algo que um fruto simples, ou uma maçã, eu criar uma classe Fruit abstrato e uma sub-classe Orange, e depois usar a coisa <>. Se apenas uma coisa tag, como uma cor, em seguida, uma enumeração pode fazer muito bem, eu acho.

Eu acho que é mais fácil ter a verificação de tipo e tal usando classes / estruturas embora. Como, o que aconteceria se alguém tentou adicionar algumas frutas do tipo maçã para que fruitlist de vocês? iria se tornar uma laranja? ele teria de verificar se o tipo de fruto do fruto era laranja? o que aconteceria se não fosse? ArgumentException?

Eu acho que eu iria para classes e <> coisinha. Mas isso sou eu. Na verdade, se fosse eu, eu acho que eu teria apenas à frente foi e decimal usado para o peso e tudo o que precisava ser medido ... e depois tinha algo como (totalmente errado sintaxe etc, mas você começa a idéia espero):

class FruitList<TFruit> where TFruit : Fruit {}

abstract class Fruit {public abstract decimal Weight {get; protected set; }}

class Orange : Fruit { ... }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top