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