Pregunta

Si tiene una clase de colección personalizada que almacena los pesos de una sola clase de frutas individualmente en flotadores / dobles, así:

1.1, 3.3, 6.6, 4.4, ...

y necesitaría especificar si es flotante o doble y para diferenciar el tipo de fruta, ¿es mejor hacerlo así?

Usando una enumeración:

FruitList<float, FruitType.Orange>

o

Usando una enumeración en el constructor:

FruitList<float> (FruitType.Orange)

o

Usando una clase:

FruitList<float, Orange>

o

Usando una clase en el constructor:

FruitList<float> (Orange)

Lo que me confunde es si especificar este tipo de cosas tiene sentido en < > área (no sé cómo se llama esa área)?

¿Cuál es la práctica mejor, más rápida y más eficiente?

Por cierto, la clase Orange nunca se usa en ningún lado, solo la escribí si eso tuviera sentido especificar el tipo de ese tipo.

EDITAR: Por cierto, este es solo un caso de ejemplo, no el real, pero esto se refleja de manera clara. Al igual que todo es flotante / doble y se pasa a otros métodos. Pero los métodos necesitan saber qué tipo de fruta realizar correctamente. La fruta en sí misma no significa nada.

¿Fue útil?

Solución

En primer lugar, los valores de enumeración no son tipos, por lo que el ejemplo

FruitList<float, FruitType.Orange>

no funcionará. Si desea asegurarse de que su lista genérica se escriba estáticamente en Orange, tendrá que usar esta

FruitList<float, Orange>

aunque nunca usará la clase <=>. Tal como lo veo, probablemente no sea necesario, ya que puede transmitir el tipo en el nombre de la variable:

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

Otros consejos

FruitList<float>(FruitType.Orange) es probablemente el camino a seguir.

float no puede ser más que un parámetro de tipo. El tipo de fruta es solo una propiedad. No tiene sentido crear un tipo separado y usar parámetros de tipo para él.

Depende de si esa Naranja tuya será como una ... etiqueta ... como Color. Un automóvil puede ser azul y rojo y aún ser & "; El mismo &"; coche. Si desea que la naranja pueda hacer algo especial, algo diferente a una fruta simple o una manzana, creo una clase de fruta abstracta y una naranja de subclase, y luego uso & Lt; & Gt ; cosa. Si solo es una etiqueta, como un color, entonces una enumeración puede funcionar bien, supongo.

Creo que es más fácil tener una verificación de tipo y tal usando clases / estructuras. ¿Qué pasaría si alguien intentara agregar alguna fruta de tipo manzana a esa lista de frutas tuya? se convertiría en una naranja? ¿tendría que verificar si el tipo de fruta de la fruta era naranja? ¿Qué pasaría si no fuera así? argumento de excepción?

Creo que iría a clases y < > cosita. Pero ese soy yo. En realidad, si fuera yo, creo que habría seguido adelante y usado decimal para el peso y todo lo demás que debía medirse ... y luego tenía algo como (sintaxis totalmente incorrecta, etc., pero espero que tenga la idea ):

class FruitList<TFruit> where TFruit : Fruit {}

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

class Orange : Fruit { ... }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top