Ok, una pregunta fácil.¿Evaluar en captador de propiedades o al crear una instancia?
Antes que nada, debo decir que mi preocupación no es rendimiento. Soy totalmente consciente de que cualquier costo de rendimiento que una u otra opción impliquen probablemente carezca de sentido y ni siquiera valga la pena considerarlo en los escenarios normales. Tiene más que ver con los estándares de diseño y la curiosidad sobre cómo lo haría la mayoría de los codificadores.
Ok, así que la pregunta es bastante simple:
Supongamos que tengo un ComplexNumberstruct
que podría poner en práctica la siguiente manera:
public struct Complex : IEquatable<Complex>, IFormattable
{
readonly double realPart, imaginaryPart, magnitude, argument;
readonly static Complex j = new Complex(0, 1);
public Complex(double realPart, double imaginaryPart)
{
this.realPart = realPart;
this.imaginaryPart = imaginaryPart;
this.magnitude = Math.Sqrt(Math.Pow(realPart, 2) + Math.Pow(imaginaryPart, 2));
this.argument = Math.Atan2(imaginaryPart, realPart);
}
public double RealPart { get { return this.realPart; } }
public double ImaginaryPart { get { return this.imaginaryPart; } }
public double Magnitude { get { return this.magnitude; } }
public double Argument { get { return this.argument; } }
public static Complex J { get { return Complex.j; } }
...
}
Los Magnitude
y Argument
propiedades tienen un respaldo campos que se encuentran evaluado en tiempo de construcción. Otra opción sería simplemente evaluar el valor correspondiente en cualquier getter.
¿Cuál es la forma más recomendable de hacerlo? ¿Existe algún estándar de codificación que recomiende alguna opción por el solo hecho de tener un estándar? Y si no hay uno, ¿cuál es normalmente la opción preferida? ¿O depende solo del rendimiento, que en mi caso es irrelevante?
Ehm, no hay setters en el código. – svick
No te sigo. Este es un tipo inmutable, no hay setters. La pregunta es si elegir la opción de inicializar los campos correspondientes en el constructor y luego hacerlos disponibles a través de un getter o simplemente elegir no tener campo de respaldo y evaluar cada vez en el getter. – InBetween
Por supuesto, actualizado anteriormente – hofnarwillie