Saltar al contenido

Beneficios de la codificación de sólo lectura en C#

El modificador de «sólo lectura» puede utilizarse en un total de cuatro contextos:

  1. Declaración de campo
  2. Declaración de estructura de sólo lectura
  3. Definición de miembro de sólo lectura
  4. Ref. método de sólo lectura de retorno

Cuando utilizamos el contexto de la declaración de campo, necesitamos saber que el único momento en que puede producirse la cesión es cuando se declara o cuando se invoca al constructor de la misma clase.

Beneficios de la codificación de sólo lectura en C#
Beneficios de la codificación de sólo lectura en C#
123456789101112131415161718192021222324252627282930313233 usando el Sistema;namespace {clase públicaProgramación de Sólo Lectura{nombre de la cadena de lectura;edad de sólo lectura;salario de sólo lectura;programación de sólo lectura pública(){ nombre ="nombre predeterminado"; edad =99; salario =10000; }publicReadOnlyProgramming(string name,int age,int salary){ Nombre = nombre; Edad = edad; Salario = sueldo;}publicstaticvoidMain(){ReadOnlyProgramming a =newReadOnlyProgramming();ReadOnlyProgramming b =newReadOnlyProgramming("Florian",28,200000); Consola. WriteLine($"La variable: {nombre de(a)} se mantiene: {a.Nombre} con la edad: {a.Edad} y el salario: {a.Salario} USD/año!"); Console.WriteLine($"La variable: {nombre de(b)} se mantiene: {b.Nombre} con la edad: {b.Edad} y el salario: {b.Salario} USD/año!");//a.Nombre = "Naomi"; // al no comentar esto se produce un error Consola.ReadKey();}}}

csharp

La siguiente salida se produce cuando el código se ejecuta.

12La variable: un asimiento: Nombre por defecto con la edad: 99 y el salario: 10000 USD/año! La variable: b se mantiene: Florian con edad: 28 años y salario: 200000 USD/año.
bash

Tenemos dos constructores en nuestra clase. Uno sin argumento establece un valor por defecto para las propiedades de sólo lectura después de ser llamado, y el segundo constructor toma tres argumentos e inicializa las propiedades con ellos. Esto está permitido, pero si tuviéramos que modificar cualquiera de las propiedades marcadas con readonly después de que la instancia sea creada, el siguiente error nos daría la bienvenida.

1Un campo de sólo lectura no puede ser asignado a (excepto en un constructor o un inicializador de variables)

bash

Cuando utilizamos el contexto de estructura de sólo lectura, la regla es que tendremos una estructura inmutable en la que todos los campos de instancia deben marcarse como de sólo lectura, de lo contrario el siguiente error nos da la bienvenida.

1Los campos de las estructuras de sólo lectura deben ser de sólo lectura.

bash

Vamos a crear una estructura para almacenar información estática del servidor sobre nuestra infraestructura.

12345678910111213141516171819202122232425262728293031323334 usando el Sistema;namespace {publicreadonlystruct Server {publicreadonlystring Name;publicreadonlystring Location;publicreadonlystring OS;publicreadonlyint vCPU; publicreadonlyint RAM;publicServer(nombre de la cadena,ubicación de la cadena,cadena os,int vcpu,int ram){ Nombre = nombre; Ubicación = ubicación; OS = os; vCPU = vcpu; RAM = ram;}publicoverridestringToString()=> $"(Nombre: {Nombre}, Ubicación: {Ubicación}, Sistema Operativo: {OS}, vCPU: {vCPU}, RAM: {RAM} GB)";}clase públicaProgramación de sólo lectura{publicstaticvoidMain(){Servidor a =newServer("Controlador de dominio", "Amsterdam", "Centos 7.6",8,16); Console.WriteLine(a.ToString()); Console.ReadKey();}}}

csharp

El resultado producido es el siguiente.

1(Nombre: Controlador de Dominio, Localización: Amsterdam, Sistema Operativo: Centos 7.6, vCPU: 8, RAM: 16 GB)

bash

Hay dos conceptos importantes aquí. No podemos añadir una nueva propiedad sin hacerla de sólo lectura. Esto impide que los datos se modifiquen, y tampoco podemos alterar las propiedades existentes.

Cuando usamos el contexto de miembros de sólo lectura, tenemos la opción de aplicar la palabra clave en los miembros. Sin embargo, no podemos aplicarla en declaraciones de clase o de miembros de la interfaz. Hay dos reglas que debes recordar:

  1. Los métodos o propiedades estáticas no pueden ser de sólo lectura.
  2. Los constructores no pueden ser de sólo lectura.

Una pequeña demostración de un miembro de sólo lectura para nuestro ejemplo anterior sería.

1publicreadonlyDateTime InstallDate {get;}

csharp

El contexto de sólo lectura del árbitro es un poco más complicado, e implica punteros y código inseguro. El modificador aplicado a la referencia significa que la referencia devuelta no puede ser modificada. A cualquier tipo que pueda ser devuelto por el árbitro se le puede aplicar el modificador de sólo lectura.