Directrices de diseño del marco.

1: Pautas de nomenclatura:

Los nombres de clases y variables usan la nomenclatura Pascal (la primera letra de cada palabra está en mayúscula), el nombre del parámetro de función usa la primera letra de la primera palabra en minúscula y la primera letra de las palabras restantes está en mayúscula.

2: Directrices de diseño tipográfico

Elige entre clases y estructuras.

1. En primer lugar, la clase es un tipo de referencia. La memoria se asigna en el montón y debe ser reciclada por GC. La estructura es un tipo de valor. La memoria se asigna en la pila y no requiere GC. Una vez finalizado el alcance , la memoria se libera, por lo que la asignación de tipos de valor y la desasignación son generalmente menos costosas que la asignación y desasignación de tipos de referencia.

2. La matriz que contiene el valor es un tipo de referencia, que almacena la dirección de referencia del tipo de referencia en el montón. La matriz que contiene el valor es un tipo de valor, que almacena el valor real del tipo de valor en la pila, por lo que la asignación de la matriz de tipo de valor y la Liberación es menos costosa que la asignación y liberación de matrices de tipo de referencia, lo mismo que 1

3. Cuando un tipo de valor integra una interfaz (la interfaz es un tipo de referencia), el tipo de valor debe encuadrarse y convertirse en un tipo de referencia. Cuando se vuelva a convertir a un tipo de valor, se desempaquetarán . Debido a que las cajas son objetos asignados en el montón y sujetos a recolección de basura, el uso excesivo de cajas y unboxing puede tener un impacto negativo en el rendimiento del montón, el recolector de basura y, en última instancia, la aplicación. Por el contrario, no se produce ningún tipo de boxeo al convertir tipos de referencia.

4. Nuevamente, la asignación a un tipo de referencia copia la referencia, mientras que la asignación a un tipo de valor copia el valor completo. Por lo tanto, la asignación a tipos de referencia grandes es menos costosa que la asignación a tipos de valores grandes.

Los siguientes casos consideran definir una estructura en lugar de una instancia de una clase:
  • Si las instancias de este tipo son pequeñas y normalmente de corta duración, o normalmente están integradas en otros objetos.
  • Representa un valor único de forma lógica, similar a los tipos primitivos ( int,, doubleetc.).
  • El tamaño de su instancia es inferior a 16 bytes.
  • Es inmutable.
  • no se encajona con frecuencia
  • Otros casos deben ser clase.

2. Diseño de clase abstracto

  • Una clase abstracta solo se puede usar como clase principal y puede crear una instancia indirecta de la clase principal a través del método de la subclase de instancia.
  • Puede haber métodos abstractos (sin cuerpos de métodos y las subclases deben implementarlos), métodos no abstractos (pueden tener cuerpos de métodos)
  • Puede haber un constructor, pero no puede ser privado, porque si es privado, las subclases no pueden acceder a él cuando construyen una instancia.
  • Los métodos abstractos solo se pueden declarar en clases abstractas

3.Diseño de interfaz

  • No declarar interfaz vacía
  • La interfaz está declarada, es mejor heredarla.

4. Diseño de estructura

No declare un constructor sin parámetros para una estructura. Seguir este principio permitirá la creación de una matriz de estructuras sin ejecutar un constructor en cada elemento de la matriz. Esto no es compatible con C#.

No declare atributos de tipo mutable, porque un tipo inmutable, cuando se modifica su valor, recrea un objeto y reemplaza el valor original (el tipo básico es un tipo inmutable y el tipo de referencia es un tipo mutable)

Tipo inmutable: después de la declaración, el valor no cambiará nuevamente, es muy útil para el acceso entre múltiples subprocesos y no causará conflictos de subprocesos.

Los métodos declarados como tipos inmutables son:

El propósito es poder acceder, pero no puede modificar su valor, puede agregar la palabra clave const de solo lectura, o solo obtener el atributo/establecer el atributo establecido en privado, para que el exterior no pueda modificar su valor.

Solo lectura: se puede usar junto con estático, está en el nivel de clase (llamado a través del nombre de la clase), si se usa solo, está en el nivel de objeto (llamado a través del objeto), no es necesario asignarlo al principio , se puede asignar en el constructor para satisfacer la invariancia del valor

const: nivel de clase (llamado por nombre de clase) , debe asignarse al declarar, satisface la invariancia de valor, no se puede usar para matrices, estructuras

Supongo que te gusta

Origin blog.csdn.net/qq_37672438/article/details/105193162
Recomendado
Clasificación