Поделиться через


Не следует использовать параметры по умолчанию

Обновлен: Ноябрь 2007

TypeName

DefaultParametersShouldNotBeUsed

CheckId

CA1026

Категория

Microsoft.Design

Критическое изменение

Критическое изменение

Причина

Тип, видимый снаружи, содержит видимый снаружи метод, использующий параметр по умолчанию.

Описание правила

Методы, использующие параметры по умолчанию, разрешены по спецификации CLS, однако компиляторы могут не учитывать значения, присвоенные этим параметрам. В коде, написанном для компиляторов, которые не учитывают значения параметров по умолчанию, должны быть явным образом предоставлены аргументы для всех параметров по умолчанию. Для однородного работы с различными языками программирования следует заменять методы, использующие параметры по умолчанию, на перегрузки методов, предоставляющие параметры по умолчанию.

Компилятор не учитывает значения параметров по умолчанию для C# и управляемого расширения для C++ при доступе к управляемому коду. Компилятор Visual Basic поддерживает методы с параметрами по умолчанию с помощью ключевого слова Optional (Visual Basic).

Предотвращение нарушений

Чтобы устранить нарушение этого правила, замените методы, использующие параметры по умолчанию, на перегрузки методов, предоставляющие параметры по умолчанию.

Отключение предупреждений

Не следует отключать вывод предупреждений для этого правила.

Пример

В следующем примере показан метод, использующий параметры по умолчанию, и перегруженные методы, обеспечивающие аналогичную функциональность.

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

Связанные правила

Замените повторяющиеся аргументы массивом параметров

См. также

Основные понятия

Спецификация CLS