El modificador const se puede aplicar (y, por lo general, se debería) a cualquier campo cuyo valor se conozca en tiempo de compilación y no cambie durante la vida del programa.
private const int num = 1729;
public const string title = "Grand" + " Master";
El modificador readonly se puede aplicar (y, por lo general, se debería) a cualquier campo que no pueda ser const, cuyo valor no cambie durante la vida del programa y que se establezca mediante un inicializador en línea o durante la instanciación (por el constructor o por un método llamado por el constructor).
private readonly int num;
private readonly System.Random rand = new System.Random();
public MyClass(int num)
{
this.num = num;
}
En situaciones sensibles para la seguridad (o incluso simplemente en una base de código grande, donde los desarrolladores tienen prioridades y objetivos distintos), deberías evitar que se pueda eludir la API pública de una clase aceptando y almacenando parámetros mutables de un método, o exponiendo un miembro mutable de una clase a través de un valor devuelto o como parámetro out.
Aunque el modificador readonly impide que se sobrescriba el valor o la referencia de un campo, no ofrece ninguna protección para los miembros de un tipo de referencia.
readonly List<int> ints = new List<int>();
void Foo()
{
ints.Add(1); // ok
ints = new List<int>(); // fails to compile
}
Para garantizar que todos los miembros de un tipo de referencia estén protegidos, los campos se pueden marcar como readonly y se pueden definir propiedades automáticas sin un descriptor de acceso set.
La Biblioteca de Clases Base (BCL) proporciona algunas versiones de solo lectura de colecciones cuando es necesario impedir que se actualicen los miembros de una colección. Estas adoptan la forma de envoltorios:
ReadOnlyDictionary<T> expone un Dictionary<T> como de solo lectura.ReadOnlyCollection<T> expone un List<T> como de solo lectura.El sistema de autenticación que viste por última vez en developer-privileges necesita un poco de atención. Se te ha encargado la tarea de limpiar el código. Un proyecto de limpieza como este no solo les facilitará la vida a los futuros mantenedores, sino que también sacará a la luz y corregirá algunas vulnerabilidades de seguridad.
Esta es una tarea de refactorización. Añade el modificador const a aquellos miembros de Authenticator o Identity que consideres apropiados.
Esta es una tarea de refactorización. Añade el modificador readonly a aquellos campos de la clase Authenticator o de la estructura Identity que consideres apropiados.
Elimina el accessor set o hazlo private en cualquier propiedad apropiada de la clase Authenticator o de la estructura Identity.
Actualmente, el campo de identidad del administrador se devuelve mediante una llamada a Admin. Esto no es lo ideal, ya que quien llama puede modificar el campo. Encuentra la forma de impedir que quien llama modifique los datos del administrador en el objeto Authenticator.
Actualmente, el diccionario que contiene las identidades de los desarrolladores privilegiados codificadas directamente se devuelve mediante una llamada a GetDevelopers(). Esto no es lo ideal, ya que quien llama puede modificar el diccionario. Encuentra la forma de impedir que quien llama modifique los datos de los desarrolladores en el objeto Authenticator.
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.