Conjunto de reglas Reglas de directrices de diseño básicas para código administrado
Puede utilizar el conjunto Reglas de directrices de diseño básicas de Microsoft para centrarse en facilitar la comprensión y el uso del código.Se recomienda incluir este conjunto de reglas si el proyecto incluye código de bibliotecas o si desea exigir procedimientos recomendados para el código que es fácil de mantener.
El conjunto Reglas de directrices de diseño básicas incluye todas las reglas del conjunto Reglas mínimas recomendadas de Microsoft.Para obtener una lista de las reglas mínimas, vea Conjunto de reglas Reglas recomendadas administradas para código administrado.
En la tabla siguiente se describen todas las reglas del conjunto Reglas de directrices de diseño básicas de Microsoft.
Regla |
Descripción |
---|---|
Los tipos que poseen campos descartables deben ser descartables |
|
Declare los controladores de evento correctamente |
|
Marcar los ensamblados con AssemblyVersionAttribute |
|
Los tipos secundarios deberían poder llamar a los métodos de interfaz |
|
Los tipos que poseen recursos nativos deben ser descartables |
|
Mueva P/Invokes a la clase NativeMethods |
|
No oculte métodos de clases base |
|
Implemente IDisposable correctamente |
|
No producir excepciones en ubicaciones inesperadas |
|
Evitar aceleradores duplicados |
|
Deben existir puntos de entrada P/Invoke |
|
Los elementos P/Invoke no deben estar visibles |
|
Los tipos de diseño automático no deben ser visibles para COM |
|
Llame a GetLastError inmediatamente después de P/Invoke |
|
Los tipos base de tipos visibles para COM deben ser visibles para COM |
|
Los métodos de registro COM se deben adjuntar |
|
Declare los elementos P/Invoke correctamente |
|
Quitar los finalizadores vacíos |
|
Los campos de tipos de valor deberían ser portátiles |
|
Las declaraciones P/Invoke deben ser portátiles |
|
No bloquear objetos con identidad débil |
|
Revisar las consultas SQL en busca de vulnerabilidades de seguridad |
|
Especifique cálculo de referencias para argumentos de cadena P/Invoke |
|
Revisar la seguridad declarativa en los tipos de valor |
|
Los punteros no deberían estar visibles |
|
Los tipos seguros no deberían exponer campos |
|
La seguridad del método debería ser un supraconjunto del tipo |
|
Los métodos APTCA deben llamar solo a métodos APTCA |
|
Los tipos APTCA solo amplían tipos base APTCA |
|
No exponer indirectamente métodos con peticiones de vínculos |
|
Las peticiones de vínculos de remplazo deberían ser idénticas a la base |
|
Incluir cláusulas Finally vulnerables en un bloque Try externo |
|
Las peticiones de tipo vínculos requieren peticiones de herencias |
|
Los tipos críticos para la seguridad no pueden participar en la equivalencia de tipos |
|
Los constructores predeterminados deben ser al menos tan críticos para la seguridad como los constructores predeterminados de tipo base. |
|
Los delegados deben enlazarse a métodos con una transparencia coherente |
|
Los métodos deben mantener una transparencia coherente cuando remplazan métodos base |
|
Los métodos transparentes deben contener solo IL que se puedan comprobar |
|
Los métodos transparentes no deben llamar a métodos con el atributo SuppressUnmanagedCodeSecurity |
|
El código transparente no debe hacer referencia a elementos críticos para la seguridad |
|
Los métodos transparentes no deben satisfacer LinkDemands |
|
Los tipos deben ser al menos tan críticos para la seguridad como sus interfaces y tipos base. |
|
Los métodos transparentes no pueden usar aserciones de seguridad |
|
Los métodos transparentes no deben llamar a código nativo |
|
Iniciar de nuevo para preservar los detalles de la pila |
|
No desechar objetos varias veces |
|
Inicializar campos estáticos de tipo de valor alineados |
|
No marcar los componentes servidos como WebMethod |
|
Los campos desechables se deben desechar |
|
No llamar a métodos reemplazables en constructores |
|
Los tipos descartables deben declarar el finalizador |
|
Los finalizadores deben llamar al finalizador de la clase base |
|
Implementar constructores de serialización |
|
Sobrecargar el operador de igualdad al remplazar el tipo de valor de igualdad |
|
Marcar puntos de entrada de Windows Forms con STAThread |
|
Marcar todos los campos no serializables |
|
Llamar a métodos de clase base en tipos ISerializable |
|
Marcar los tipos ISerializable con SerializableAttribute |
|
Implementar los métodos de serialización de forma correcta |
|
Implementar ISerializable correctamente |
|
Proporcionar argumentos correctos a los métodos de formato |
|
Prueba para NaN correcta |
|
No declarar miembros estáticos en tipos genéricos |
|
No exponer listas genéricas |
|
Utilizar instancias genéricas del controlador de eventos |
|
Los métodos genéricos deben proporcionar un parámetro de tipo |
|
Evitar parámetros excesivos en tipos genéricos |
|
No anidar tipos genéricos en signaturas de miembro |
|
Utilizar valores genéricos cuando sea posible |
|
Las enumeraciones deben tener un valor igual a cero |
|
Las colecciones deben implementar la interfaz genérica |
|
Considerar pasar los tipos base como parámetros |
|
Los tipos abstractos no deberían tener constructores |
|
El operador de sobrecarga es igual que la suma y resta de sobrecarga |
|
Marcar los ensamblados con CLSCompliantAttribute |
|
Marcar los ensamblados con ComVisibleAttribute |
|
Marcar atributos con AttributeUsageAttribute |
|
Definir descriptores de acceso para los argumentos de atributo |
|
Los indizadores no deben ser multidimensionales |
|
Utilizar las propiedades donde corresponda |
|
Reemplaza argumentos repetitivos con una matriz de parámetros |
|
No debería utilizar parámetros predeterminados |
|
Marcar enumeraciones con FlagsAttribute |
|
El almacenamiento de la enumeración debe ser de tipo Int32 |
|
Utilizar eventos cuando sea apropiado |
|
No capturar los tipos de excepción general |
|
Implementar constructores de excepción estándar |
|
Los tipos anidados no deben ser visibles |
|
Las implementaciones de ICollection tienen miembros fuertemente tipados |
|
Invalidar métodos en tipos comparables |
|
Los enumeradores deben estar fuertemente tipados |
|
Las listas están fuertemente tipadas |
|
Proporcionar un mensaje ObsoleteAttribute |
|
Utilizar argumento integral o de cadena para los indizadores |
|
Las propiedades no deben ser de solo escritura |
|
No sobrecargar el operador de igualdad en los tipos de referencia |
|
No declarar miembros protegidos en tipos sealed |
|
No declarar miembros virtuales en tipos sealed |
|
Declare tipos en espacios de nombres |
|
No declarar campos de instancia visibles |
|
Los tipos titulares estáticos deben ser sealed |
|
Los tipos titulares estáticos no deben tener constructores |
|
Los parámetros de URI no deben ser cadenas |
|
Los valores devueltos URI no deben ser cadenas |
|
Las propiedades URI no deben ser cadenas |
|
Las sobrecargas URI de cadena llaman a sobrecargas System.Uri |
|
Los tipos no deben ampliar ciertos tipos base |
|
Los miembros no deben exponer algunos tipos concretos |
|
Las excepciones deben ser públicas |
|
Los nombres de las variables no deben coincidir con los nombres de los campos |
|
Evite la excesiva complejidad |
|
Los identificadores se deberían diferenciar en algo más que en el uso de mayúsculas y minúsculas |
|
Los identificadores no deberían coincidir con palabras clave |
|
Revisar parámetros sin utilizar |
|
Quitar variables locales no utilizadas |
|
Evitar variables locales excesivas |
|
Inicializar campos estáticos de tipo de referencia alineados |
|
Evitar código privado al que no se llama |
|
Evitar las clases internas sin instancia |
|
Evitar atributos no sellados |
|
Preferir las matrices escalonadas antes que multidimensionales |
|
Invalidar Equals y el operador Equals en los tipos de valores |
|
Las propiedades no deberían devolver matrices |
|
Comprobar si las cadenas están vacías mediante la longitud de cadena |
|
Marcar el miembro como estático |
|
Evitar los campos privados sin utilizar |
|
No provocar tipos de excepción reservados |
|
Utilizar equivalentes administrados de la API Win32 |
|
Crear instancias de las excepciones del argumento correctamente |
|
Los campos no constantes no deben ser visibles |
|
No marcar enumeraciones con FlagsAttribute |
|
No producir excepciones en cláusulas de excepción |
|
Debe proteger los finalizadores |
|
No reducir la visibilidad del miembro heredado |
|
Los miembros deben diferenciarse por algo más que por un tipo de valor devuelto |
|
Reemplazar el operador equals al sobrecargar operadores de igualdad |
|
Las sobrecargas del operador tienen alternativas con nombre |
|
Los operadores deben tener sobrecargas simétricas |
|
Las propiedades de la colección deben ser de solo lectura |
|
Usar parámetros para argumentos de variable |
|
Pasar objetos System.Uri en lugar de cadenas |
|
Proporcionar métodos de deserialización para campos opcionales |