Evitare l'utilizzo di parametri predefiniti

Aggiornamento: novembre 2007

TypeName

DefaultParametersShouldNotBeUsed

CheckId

CA1026

Category

Microsoft.Design

Breaking Change

Breaking

Causa

Un tipo visibile esternamente contiene un metodo visibile esternamente che utilizza un parametro predefinito.

Descrizione della regola

I metodi che utilizzano parametri predefiniti sono consentiti dalla specifica CLS (Common Language Specification); questa specifica, tuttavia, consente ai compilatori di ignorare i valori assegnati a questi parametri. Il codice scritto per compilatori che ignorano i valori dei parametri predefiniti deve fornire in modo esplicito gli argomenti per ogni parametro predefinito. Per mantenere il comportamento desiderato tra diversi linguaggi di programmazione, è necessario sostituire i metodi che utilizzano parametri predefiniti con overload di metodi che forniscono i parametri predefiniti.

Il compilatore ignora i valori dei parametri predefiniti per C# e per le estensioni gestite per C++ quando accede a codice gestito. Il compilatore Visual Basic supporta i metodi con parametri predefiniti mediante la parola chiave Optional (Visual Basic).

Correzione di violazioni

Per correggere una violazione di questa regola, sostituire il metodo che utilizza parametri predefiniti con overload di metodi che forniscono parametri predefiniti.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito viene illustrato un metodo che utilizza parametri predefiniti e i metodi di overload che forniscono una funzionalità 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

Regole correlate

Sostituire gli argomenti ripetitivi con una matrice di parametri

Vedere anche

Concetti

Specifiche CLS (Common Language Specification)