Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las reglas de diseño facilitan el cumplimiento de las directrices de diseño de .NET Framework de .
En esta sección
Regla | Descripción |
---|---|
CA1000: No declarar miembros estáticos en tipos genéricos | Cuando se llama a un miembro estático de un tipo genérico, se debe especificar el argumento type para el tipo. Cuando se llama a un miembro de instancia genérico que no admite la inferencia, se debe especificar el argumento type para el miembro. En estos dos casos, la sintaxis para especificar el argumento de tipo es diferente y fácilmente confusa. |
CA1001: Los tipos que poseen campos descartables deben ser descartables | Una clase declara e implementa un campo de instancia que es un tipo System.IDisposable y la clase no implementa IDisposable. Una clase que declara un campo IDisposable indirectamente posee un recurso no administrado y debe implementar la interfaz IDisposable. |
CA1002: No hacer públicas las listas genéricas | System.Collections.Generic.List<(Of <(T>)>) es una colección genérica diseñada para el rendimiento, no para la herencia. Por lo tanto, List no contiene ningún miembro virtual. Las colecciones genéricas diseñadas para la herencia deben exponerse en su lugar. |
CA1003: Usar instancias de controlador de eventos genéricos | Un tipo contiene un delegado que devuelve void, cuya firma contiene dos parámetros (el primer objeto y el segundo un tipo que se puede asignar a EventArgs) y el ensamblado contenedor tiene como destino .NET Framework 2.0. |
CA1005: Evitar parámetros excesivos en tipos genéricos | Cuantos más parámetros de tipo contiene un tipo genérico, más difícil es saber y recordar lo que representa cada parámetro de tipo. Normalmente es obvio con un parámetro de tipo, como en List<T>, y en determinados casos con dos parámetros de tipo, como en Dictionary<TKey, TValue>. Sin embargo, si existen más de dos parámetros de tipo, la dificultad es demasiado grande para la mayoría de los usuarios. |
CA1008: Las enumeraciones deben tener un valor cero | El valor predeterminado de una enumeración sin inicializar, igual que otros tipos de valor, es cero. Una enumeración con atributos noflags debe definir un miembro mediante el valor de cero para que el valor predeterminado sea un valor válido de la enumeración. Si una enumeración que tiene aplicado el atributo FlagsAttribute define un miembro con valores cero, su nombre debe ser "None" para indicar que no se ha establecido ningún valor en la enumeración. |
CA1010: Las colecciones deben implementar la interfaz genérica | Para ampliar la facilidad de uso de una colección, implemente una de las interfaces de colección genéricas. Entonces podrá utilizar la colección para rellenar tipos de colecciones genéricas. |
CA1012: Los tipos abstractos no deben tener constructores públicos | Los constructores de tipos abstractos solo se pueden llamar mediante tipos derivados. Dado que los constructores públicos crean instancias de un tipo y no se pueden crear instancias de un tipo abstracto, un tipo abstracto que tiene un constructor público está diseñado incorrectamente. |
CA1014: Marcar los ensamblados con CLSCompliantAttribute | Common Language Specification (CLS) define restricciones de nomenclatura, tipos de datos y reglas a las que los ensamblados deben cumplir si se usarán en lenguajes de programación. Un buen diseño determina que todos los ensamblados indican explícitamente el cumplimiento de CLS mediante CLSCompliantAttribute. Si este atributo no está presente en un ensamblado, el ensamblado no es compatible. |
CA1016: Marcar los ensamblados con AssemblyVersionAttribute | .NET usa el número de versión para identificar de forma única un ensamblado y enlazar a tipos en ensamblados con nombre seguro. El número de versión se utiliza junto con la versión y la directiva del fabricante. De forma predeterminada, las aplicaciones solo se ejecutan con la versión del ensamblado con la que se compilaron. |
CA1017: Marque los ensamblados con el atributo ComVisible | ComVisibleAttribute determina cómo los clientes COM acceden al código administrado. Los procedimientos de diseño recomendados dictan que los ensamblados indican explícitamente la visibilidad COM. La visibilidad COM se puede establecer para un ensamblado completo y, a continuación, se puede invalidar para los tipos individuales y los miembros de tipo. Si este atributo no está presente, el contenido del ensamblado es visible para los clientes COM. |
CA1018: Marcar atributos con AttributeUsageAttribute | Al definir un atributo personalizado, marquelo mediante AttributeUsageAttribute para indicar dónde se puede aplicar el atributo personalizado en el código fuente. El significado y el uso previsto de un atributo determinarán sus ubicaciones válidas en el código. |
CA1019: definir descriptores de acceso para los argumentos de atributo | Los atributos pueden definir argumentos obligatorios que se deben especificar al aplicar el atributo a un destino. Estos también se conocen como argumentos posicionales porque se proporcionan a constructores de atributos como parámetros posicionales. Para cada argumento obligatorio, el atributo también debe proporcionar una propiedad de solo lectura correspondiente para que el valor del argumento se pueda recuperar en tiempo de ejecución. Los atributos también pueden definir argumentos opcionales, que también se conocen como argumentos con nombre. Estos argumentos se proporcionan a los constructores de atributos por nombre y deben tener una propiedad de lectura y escritura correspondiente. |
CA1021: Evitar los parámetros out | Para pasar tipos por referencia (utilizando los parámetros out o ref) es necesario tener experiencia con punteros, saber la diferencia entre los tipos de referencia y los tipos de valor, y controlar métodos con varios valores devueltos. Además, la diferencia entre los parámetros out y ref no se entiende ampliamente. |
CA1024: Use propiedades cuando corresponda | Un método público o protegido tiene un nombre que comienza por "Get", no toma ningún parámetro y devuelve un valor que no es una matriz. El método podría ser un buen candidato para convertirse en propiedad. |
CA1027: Marcar enumeraciones con FlagsAttribute | Una enumeración es un tipo de valor que define un conjunto de constantes con nombre relacionadas. Aplique FlagsAttribute a una enumeración cuando sus constantes con nombre se puedan combinar significativamente. |
CA1028: El almacenamiento para enumeraciones debe ser Int32 | Una enumeración es un tipo de valor que define un conjunto de constantes con nombre relacionadas. De forma predeterminada, el tipo de datos System.Int32 se usa para almacenar el valor constante. Aunque puede cambiar este tipo subyacente, no es necesario ni recomendado para la mayoría de los escenarios. |
CA1030: Utilizar eventos cuando sea apropiado | Esta regla detecta métodos que tienen nombres que normalmente se usarían para eventos. Si se llama a un método en respuesta a un cambio de estado claramente definido, un controlador de eventos debe invocar el método . Los objetos que llaman al método deben generar eventos en lugar de llamar al método directamente. |
CA1031: No capturar los tipos de excepción general | No se deben detectar excepciones generales. Detecte una excepción más específica o reinicie una excepción general como la última instrucción del bloque Catch. |
CA1032: Implementación de constructores de excepciones estándar | Si no se proporciona el conjunto completo de constructores, es posible que sea difícil controlar correctamente las excepciones. |
CA1033: Los tipos secundarios deben poder llamar a los métodos de interfaz | Un tipo visible externamente no sellado proporciona una implementación explícita del método de una interfaz pública y no proporciona un método alternativo visible externamente que tenga el mismo nombre. |
CA1034: Los tipos anidados no deben ser visibles | Los tipos anidados son tipos declarados en el ámbito de otro tipo. Los tipos anidados son útiles para encapsular los detalles de la implementación privada del tipo contenido. Los tipos anidados, utilizados para este propósito, no deben ser visibles externamente. |
CA1036: Invalidar métodos en tipos comparables | Un tipo público o protegido implementa la interfaz System.IComparable. No invalida Object.Equals ni sobrecarga al operador específico del lenguaje para la igualdad, desigualdad, menor que o mayor que. |
CA1040: Evitar las interfaces vacías | Las interfaces definen miembros que proporcionan un comportamiento o un contrato de uso. Cualquier tipo puede adoptar la funcionalidad descrita por la interfaz, independientemente de dónde aparezca el tipo en la jerarquía de herencia. Un tipo implementa una interfaz proporcionando implementaciones para los miembros de la interfaz. Una interfaz vacía no define ningún miembro; por lo tanto, no define un contrato que se puede implementar. |
CA1041: Proporcionar un mensaje ObsoleteAttribute | Un tipo o miembro se marca mediante un atributo System.ObsoleteAttribute que no tiene especificada su propiedad ObsoleteAttribute.Message. Cuando se compila un tipo o miembro marcado mediante ObsoleteAttribute, se muestra la propiedad Message del atributo , que proporciona a los usuarios información sobre el tipo o miembro obsoletos. |
CA1043: usar el argumento entero o de cadena para los indexadores | Los indexadores (es decir, las propiedades indexadas) deben usar tipos enteros o de cadena para el índice. Estos tipos se suelen usar para indexar estructuras de datos y aumentan la facilidad de uso de la biblioteca. El uso del tipo object debe restringirse a aquellos casos en los que no se puede especificar el tipo entero o de cadena específico en tiempo de diseño. |
CA1044: Las propiedades no deben ser de solo escritura | Aunque es aceptable y a menudo necesario tener una propiedad de solo lectura, las directrices de diseño prohíben el uso de propiedades de solo escritura. Esto se debe a que permitir que un usuario establezca un valor y, a continuación, impedir que el usuario vea ese valor, no proporciona ninguna seguridad. Además, sin acceso de lectura, no se puede ver el estado de los objetos compartidos, lo que limita su utilidad. |
CA1045: No pasar tipos por referencia | Para pasar tipos por referencia (utilizando los parámetros out o ref) es necesario tener experiencia con punteros, saber la diferencia entre los tipos de referencia y los tipos de valor, y controlar métodos con varios valores devueltos. Los arquitectos de biblioteca que diseñan para una audiencia general no deben esperar que los usuarios se conviertan en expertos en trabajar con parámetros out o ref. |
CA1046: No sobrecargar el operador de igualdad en los tipos de referencia | Para los tipos de referencia, la implementación predeterminada del operador de igualdad es casi siempre correcta. De forma predeterminada, dos referencias son iguales solo si apuntan al mismo objeto. |
CA1047: No declarar miembros protegidos en tipos sellados | Los tipos declaran miembros protegidos para que los tipos heredados puedan obtener acceso o reemplazar el miembro. Por definición, los tipos sellados no se pueden heredar, lo que significa que no se pueden invocar los métodos protegidos en tipos sellados. |
CA1050: Declarar tipos en espacios de nombres | Los tipos se declaran en espacios de nombres para evitar colisiones de nombres y como una manera de organizar los tipos relacionados en una jerarquía de objetos. |
CA1051: No declarar campos de instancia visibles | El uso principal de un campo debe ser como detalle de implementación. Los campos deben ser privados o internos y deben exponerse mediante el uso de propiedades. |
CA1052: los tipos de soporte estático deben estar sellados | Un tipo público o protegido contiene solo miembros estáticos y no se declara mediante el modificador sealed (C#) o NotInheritable (Visual Basic). Un tipo que no está pensado para heredar debe marcarse mediante el modificador sellado para evitar su uso como tipo base. |
CA1053: Los tipos titulares estáticos no deben tener constructores | Un tipo público o público anidado declara sólo miembros estáticos y tiene un constructor predeterminado público o protegido. El constructor no es necesario porque llamar a miembros estáticos no requiere una instancia del tipo . La sobrecarga de la cadena debería llamar a la sobrecarga del identificador URI utilizando el argumento string por motivos de seguridad y protección. |
CA1054: los parámetros de URI no deben ser cadenas | Si un método toma una representación de cadena de un URI, se debe proporcionar una sobrecarga correspondiente que tome una instancia de la clase URI, que proporciona estos servicios de forma segura y segura. |
CA1055: los valores devueltos de URI no deben ser cadenas | Esta regla supone que el método devuelve un URI. Una representación de cadena de un URI es propensa a errores de análisis y codificación, y puede provocar vulnerabilidades de seguridad. La clase System.Uri proporciona estos servicios de forma segura y segura. |
CA1056: las propiedades del URI no deben ser cadenas | Esta regla supone que la propiedad representa un URI. Una cadena de texto de un URI es propensa a errores de análisis y codificación, y puede provocar vulnerabilidades de seguridad. La clase System.Uri proporciona estos servicios de forma segura y segura. |
CA1058: Los tipos no deben ampliar ciertos tipos base | Un tipo visible externamente extiende algunos tipos base. Use una de las alternativas. |
CA1060: Mueva P/Invokes a la clase NativeMethods | Los métodos de invocación de plataforma, como los marcados con el System.Runtime.InteropServices.DllImportAttribute o los métodos definidos mediante la palabra clave Declare en Visual Basic, acceden al código no administrado. Estos métodos deben ser de la clase NativeMethods, SafeNativeMethods o UnsafeNativeMethods. |
CA1061: No ocultar métodos de clase base | Un método de un tipo base está oculto por un método con nombre idéntico en un tipo derivado, cuando la firma de parámetros del método derivado solo difiere por tipos que son más débilmente derivados que los tipos correspondientes en la firma de parámetros del método base. |
CA1062: validar argumentos de métodos públicos | Todos los argumentos de referencia que se pasan a métodos visibles externamente deben comprobarse con null. |
CA1063: Implementar IDisposable correctamente | Todos los tipos IDisposable deben implementar el modelo de Dispose correctamente. |
CA1064: Las excepciones deben ser públicas | Una excepción interna solo es visible dentro de su propio ámbito interno. Después de que la excepción se encuentre fuera del ámbito interno, solo se puede usar la excepción base para detectar la excepción. Si la excepción interna se hereda de System.Exception, System.SystemExceptiono System.ApplicationException, el código externo no tendrá suficiente información para saber qué hacer con la excepción. |
CA1065: No generar excepciones en ubicaciones inesperadas | Un método que no se espera que lance excepciones lanza una excepción. |
CA1066: Implementar IEquatable al invalidar Equals | Un tipo de valor invalida Equals método, pero no implementa IEquatable<T>. |
CA1067: Invalidar Equals al implementar IEquatable | Un tipo implementa IEquatable<T>, pero no invalida Equals método. |
CA1068: Los parámetros CancellationToken deben aparecer en último lugar | Un método tiene un parámetro CancellationToken que no es el último parámetro. |
CA1069: Las enumeraciones no deben tener valores duplicados | Una enumeración tiene varios miembros a los que se les asigna explícitamente el mismo valor constante. |
CA1070: No declarar los campos de eventos como virtuales | Un evento similar a un campo se declaró como virtual. |
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.