Sdílet prostřednictvím


CA1050: Deklarujte typy v oborech názvů

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Kategorie

Microsoft.Design

Narušující změna

Narušující

Příčina

Veřejný nebo chráněný typ je definován mimo obor Typ veřejné nebo chráněné je definována mimo pojmenovaný obor názvů.

Popis pravidla

Typy jsou deklarovány v oborech názvů, aby bylo zabráněno kolizím názvů a zároveň jako způsob organizace souvisejících typů v hierarchii objektů.Typy, které se nacházejí mimo všechny pojmenované obory názvů se nacházejí v globálním oboru názvů, na který se nelze odkazovat v kódu.

Jak vyřešit porušení

Pro napravení porušení tohoto pravidla je zapotřebí umístit tento typ do oboru názvů.

Kdy potlačit upozornění

Přestože nebylo nikdy zapotřebí potlačit upozornění tohoto pravidla, je bezpečné toto provést, pokud nebude sestavení nikdy použito spolu s jinými sestaveními.

Příklad

Následující příklad zobrazuje knihovnu, která má typ nesprávně deklarovaný mimo obor názvů a typ, který má stejný název v oboru názvů.

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

Následující aplikace používá knihovnu, která byla definována dříve.Všimněte si, že typ, který je deklarován mimo obor názvů je vytvořen v době, kdy název Test není kvalifikován oborem názvů.Všimněte si také, že při přístupu k typu Test v oboru názvů Goodspace je nutné zadat název.

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