CA1050: Typen in Namespaces deklarieren

TypeName

DeclareTypesInNamespaces

CheckId

CA1050

Kategorie (Category)

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Ein öffentlicher oder geschützter Typ ist außerhalb des Gültigkeitsbereichs eines benannten Namespaces definiert.

Regelbeschreibung

Typen werden innerhalb von Namespaces deklariert, um Namenskonflikte zu verhindern und um verwandte Typen in einer Objekthierarchie zu organisieren.Typen außerhalb eines benannten Namespaces befinden sich in einen globalen Namespace, auf den im Code nicht verwiesen werden kann.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, fügen Sie den Typ in einen Namespace ein.

Wann sollten Warnungen unterdrückt werden?

Zwar ist es niemals notwendig, eine Warnung dieser Regel zu unterdrücken, doch ist dies gefahrlos möglich, wenn die Assembly nie zusammen mit anderen Assemblys verwendet wird.

Beispiel

Das folgende Beispiel zeigt eine Bibliothek mit einem Typ, der in unzulässiger Weise außerhalb eines Namespaces deklariert ist, und einen gleichnamigen Typ, der in einem Namespace deklariert ist.

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

Die folgende Anwendung verwendet die zuvor definierte Bibliothek.Sie sehen, dass der außerhalb eines Namespaces deklarierte Typ erstellt wird, wenn der Name Test nicht durch einen Namespace qualifiziert wird.Beachten Sie zudem, dass für den Zugriff auf den Test-Typ in Goodspace der Namespacename benötigt wird.

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