c# - diferencia - ¿La clase de respuesta es una estructura?
struct c# (2)
Por lo general, juego con hacer juegos, pero me estoy desviando para hacer una pequeña aplicación de preguntas y respuestas, con fines educativos.
De todos modos, tengo una clase de preguntas que contiene numerosos miembros: la pregunta en sí misma, la respuesta a la pregunta , un conjunto de posibles respuestas, etc. Sin dudas esto debería ser una clase.
Sin embargo, mi clase de respuesta solo contiene una cadena, un Enum y un número de identificación int, como se muestra a continuación:
public class Answer
{
public string Answer { get { return answer;} private set { answer = value; } }
public Answer_Category = Some_Value; // The enum.
public int ID { get { return id; } private set { return id; } }
private string answer;
private int id;
}
Ok, tiene dos cuerdas, también el ctor ha salido.
Entonces, ¿debería estar haciendo esto una estructura? Pregunto, ya que parece comparable a hacer que Vector sea una estructura, ya que es una estructura de datos tan pequeña ''n all''.
Naturalmente, como una aplicación de preguntas y respuestas, la clase / estructura de respuesta va a ser objeto de muchas llamadas de búsqueda.
IMO esto debería ser una estructura, solo por el tamaño de la estructura, no han jugado con C # por algún tiempo, así que solo estoy buscando alguna aclaración.
Hay dos casos de usos principales para estructuras: para situaciones donde se desea mover convenientemente agregaciones de variables independientes (como las coordenadas de un punto), o donde un objeto pequeño e inmutable a menudo se usará en situaciones donde la identidad no es importante ( como sería el caso con, por ejemplo, Decimal
o DateTime
). Dado que una variable de tipo estructura simplemente contiene una agregación de variables, las estructuras que se utilizan con ese fin deberían simplemente exponer sus contenidos como campos públicos. Hacerlo aclarará que cualquier invariante que pueda ser aplicable a los miembros de la estructura será responsabilidad del código que crea la estructura. Por ejemplo, si se tiene una estructura MinMax
con miembros int
Minimum
y Maximum
, el uso de campos públicos expuestos para esos miembros dejaría en claro que la estructura en sí misma no promete Maximum >= Minimum
. Un método que devuelve dicha estructura puede prometer que no devolverá uno donde Maximum < Minimum
, pero los métodos que reciban estructuras y quieran Maximum >= Minimum
tendrán que verificar esos campos ellos mismos. Por otro lado, el código que desea establecer esos valores en una estructura podrá establecerlos en el orden que sea conveniente, sin tener que preocuparse de que la estructura arroje una excepción porque el Minimum
se estableció más alto que Maximum
.
Las pautas de MSDN asumen que el propósito de cualquier estructura es comportarse como un objeto. Como las estructuras mutables por piezas no se comportan como objetos, las estructuras que se usarán como objetos no se pueden cortar por partes. Por otro lado, las agregaciones de variables pueden ser útiles en sí mismas; uno debería usar una estructura en los casos en que se desea una agregación de variables, pero se debe intentar que sea lo más obvia posible que la estructura sea una agregación de variables en lugar de un objeto.
La decisión se reduce a si desea un tipo de valor o un tipo de referencia. En otras palabras, ¿qué quiere que signifique el operador de asignación? Si desea que la tarea copie el valor, use una estructura. Si quiere que la tarea tome otra referencia e, use una clase.