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


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

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Категория

Microsoft.Design

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

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

Причина

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

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

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

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

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

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

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

Пример

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

Imports System 

' 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 GoodSpace  

    Public Class Test 

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

    End Class 

End Namespace
using System;

// Violates rule: DeclareTypesInNamespaces.
public class Test
{
   public override string ToString()
   {
      return "Test does not live in a namespace!";
   }
}

namespace GoodSpace
{
   public class Test
   {
      public override string ToString()
      {
         return "Test lives in a namespace!";
      }
   }
}   

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

Imports System

Namespace ApplicationTester

    Public Class MainHolder

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

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

    End Class

End Namespace
using System;

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

            GoodSpace.Test t2 = new GoodSpace.Test();
            Console.WriteLine(t2.ToString());
        }
    }
}