Udostępnij za pośrednictwem


CA1050: Deklaruj typy w przestrzeni nazw

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Kategoria

Microsoft.Design

Zmiana kluczowa

Kluczowa

Przyczyna

Typ publiczny lub chroniony jest zdefiniowany poza zakresem nazwanego obszaru nazw.

Opis reguły

Typy są zadeklarowane w obszarach nazw, aby zapobiec kolizjom nazw oraz jest to sposób organizowania typów powiązanych w hierarchii obiektów.Typy, które są poza wszelkimi nazwanymi przestrzeniami nazw są w globalnej przestrzeni nazw, do której nie można się odwoływać w kodzie.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy umieścić typ w obszarze nazw.

Kiedy pominąć ostrzeżenia

Chociaż nigdy nie jest konieczne pominięcie ostrzeżenia od tej reguły, jest to bezpieczne, gdy zestaw nigdy zostanie użyty z innymi zestawami.

Przykład

Poniższy przykład pokazuje bibliotekę, która ma typ nieprawidłowo zadeklarowany poza obszarem nazw i typ, który ma taką samą nazwę zadeklarowaną w obszarze nazw.

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!";
      }
   }
}   

Następująca aplikacja używa biblioteki, która została wcześniej zdefiniowana.Należy zauważyć, że typ zadeklarowany poza obszarem nazw jest tworzony, gdy nazwa Test nie jest kwalifikowany przez obszar nazw.Należy zauważyć, że aby uzyskać dostęp do typu Test w Goodspace, wymagana jest nazwa obszaru nazw.

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());
        }
    }
}