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