El modificador const se puede aplicar (y por lo general se debería aplicar) a cualquier campo cuyo valor se conozca en tiempo de compilación y que 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 aplicar) a cualquier campo que no se pueda declarar como const, cuyo valor no cambie durante la vida del programa y que se establezca ya sea con un inicializador en línea o durante la instanciación (mediante el constructor o 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 delicadas en cuanto a 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 mediante un valor de retorno o como parámetro out.
Aunque el modificador readonly impide que el valor o la referencia de un campo se sobrescriba, 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) ofrece algunas versiones de solo lectura de las colecciones cuando se necesita impedir que se actualicen los miembros de una colección. Estas vienen en 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 encomendado limpiar el código. Un proyecto de limpieza así no solo les facilitará la vida a quienes mantengan el código en el futuro, sino que además expondrá y corregirá algunas vulnerabilidades de seguridad.
Esta es una tarea de refactorización. Agrega el modificador const a los miembros de Authenticator o Identity que consideres apropiados.
Esta es una tarea de refactorización. Agrega el modificador readonly a los campos de la clase Authenticator o de la estructura Identity que consideres apropiados.
Elimina el descriptor de acceso set o hazlo private en las propiedades correspondientes 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 manera de evitar que quien llama modifique los detalles del administrador en el objeto Authenticator.
Actualmente, el diccionario que contiene las identidades de 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 manera de evitar que quien llama modifique los detalles 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.