CA1050: Deklaruj typy w przestrzeni 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());
}
}
}