Udostępnij za pośrednictwem


CA1050: Zadeklarować typów w obszarach 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());
        }
    }
}