CA1050. Объявите типы в пространствах имен

Значение
Идентификатор правила CA1050
Категория Оформление
Исправление является критическим или не критическим Критическое

Причина

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

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

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

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

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

Условия для отключения предупреждений

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

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

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

Пример 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