CA1050: объявляйте типы в пространствах имен
Свойство | Значение |
---|---|
Идентификатор правила | CA1050 |
Заголовок | Объявите типы в пространствах имен |
Категория | Проектирование |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Общедоступный или защищенный тип определен вне области именованного пространства имен.
Описание правила
Типы объявляются в пространствах имен для предотвращения конфликтов имен и упорядочивания связанных типов в иерархии объектов. Типы за пределами именованного пространства имен находятся в глобальном пространстве имен, на которое нельзя ссылаться в коде.
Устранение нарушений
Чтобы устранить нарушение этого правила, разместите тип в пространстве имен.
Когда лучше отключить предупреждения
Предупреждение из этого правила можно отключить только в том случае, если сборка никогда не будет использоваться вместе с другими сборками.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#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