Compartir a través de


No debería utilizar parámetros predeterminados

Actualización: noviembre 2007

Nombre de tipo

DefaultParametersShouldNotBeUsed

Identificador de comprobación

CA1026

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo visible externamente contiene un método visible externamente que utiliza un parámetro predeterminado.

Descripción de la regla

Los métodos que utilizan parámetros predeterminados están permitidos en Common Language Specification (CLS); sin embargo, la CLS permite que los compiladores omitan los valores asignados a estos parámetros. El código escrito para que los compiladores omitan los valores de parámetro predeterminado debe proporcionar explícitamente los argumentos para cada parámetro predeterminado. Para seguir utilizando el comportamiento que desea en los lenguajes de programación, los métodos que utilizan parámetros predeterminados deberían reemplazarse con sobrecargas de métodos que proporcionen los parámetros predeterminados.

El compilador omite los valores de los parámetros predeterminados de C# y Extensión administrada para C++ al obtener acceso al código administrado. El compilador de Visual Basic admite métodos con parámetros predeterminados que utilizan la palabra clave Optional (Visual Basic).

Cómo corregir infracciones

Para corregir una infracción de esta regla, reemplace el método que utiliza los parámetros predeterminados con sobrecargas de método que proporcionan los parámetros predeterminados.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El ejemplo siguiente muestra un método que utiliza los parámetros predeterminados y los métodos sobrecargados que proporcionan una funcionalidad equivalente.

Imports System

<Assembly: CLSCompliant(True)>
Namespace DesignLibrary

    Public Class DefaultVersusOverloaded

        Sub DefaultParameters(Optional parameter1 As Integer = 1, _
                              Optional parameter2 As Integer = 5)
            ' ...
            Console.WriteLine("{0} : {1}", parameter1, parameter2)
        End Sub

        Sub OverloadedMethod()
            OverloadedMethod(1, 5)
        End Sub

        Sub OverloadedMethod(parameter1 As Integer)
            OverloadedMethod(parameter1, 5)
        End Sub

        Sub OverloadedMethod(parameter1 As Integer, parameter2 As Integer)
            ' ...
            Console.WriteLine("{0} : {1}", parameter1, parameter2)
        End Sub

    End Class

End Namespace

Reglas relacionadas

Reemplaza argumentos repetitivos con una matriz de parámetros

Vea también

Conceptos

Common Language Specification