CA1050: объявляйте типы в пространствах имен

Свойство Значение
Идентификатор правила CA1050
Заголовок Объявите типы в пространствах имен
Категория Проектирование
Исправление является критическим или не критическим Критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Общедоступный или защищенный тип определен вне области именованного пространства имен.

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

Типы объявляются в пространствах имен для предотвращения конфликтов имен и упорядочивания связанных типов в иерархии объектов. Типы за пределами именованного пространства имен находятся в глобальном пространстве имен, на которое нельзя ссылаться в коде.

Устранение нарушений

Чтобы устранить нарушение этого правила, разместите тип в пространстве имен.

Когда лучше отключить предупреждения

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

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

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Пример 1

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

// Violates rule: DeclareTypesInNamespaces.
using System;

public class Test
{
    public override string ToString()
    {
        return "Test does not live in a namespace!";
    }
}

namespace ca1050
{
    public class Test
    {
        public override string ToString()
        {
            return "Test lives in a namespace!";
        }
    }
}
' Violates rule: DeclareTypesInNamespaces.
Public Class Test     

    Public Overrides Function ToString() As String        
        Return "Test does not live in a namespace!"    
    End Function 
    
End Class

Namespace ca1050

    Public Class Test

        Public Overrides Function ToString() As String
            Return "Test lives in a namespace!"
        End Function

    End Class

End Namespace

Пример 2

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

public class MainHolder
{
    public static void Main1050()
    {
        Test t1 = new Test();
        Console.WriteLine(t1.ToString());

        ca1050.Test t2 = new ca1050.Test();
        Console.WriteLine(t2.ToString());
    }
}
Public Class MainHolder

    Public Shared Sub Main1050()
        Dim t1 As New Test()
        Console.WriteLine(t1.ToString())

        Dim t2 As New ca1050.Test()
        Console.WriteLine(t2.ToString())
    End Sub

End Class