CA1050: 名前空間で型を宣言します
TypeName |
DeclareTypesInNamespaces |
CheckId |
CA1050 |
カテゴリ |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリック型またはプロテクト型が、名前付き名前空間のスコープ外で定義されています。
規則の説明
型を名前空間内で宣言するのは、名前が衝突しないようにするためと、関連する型をオブジェクト階層形式で編成するためです。 名前付き名前空間の外部にある型は、コードで参照できないグローバル名前空間に含まれます。
違反の修正方法
この規則違反を修正するには、名前空間で型を宣言します。
警告を抑制する状況
この規則による警告を抑制する必要はまったくありませんが、そのアセンブリを他のアセンブリと共に使用しない場合は、抑制しても安全です。
使用例
名前空間の外部で不適切に宣言された型と、名前空間内に同じ名前で宣言された型を含むライブラリを次の例に示します。
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!";
}
}
}
次のアプリケーションでは、上記で定義したライブラリを使用します。 Test という名前が名前空間で修飾されていないと、名前空間の外部で宣言された型が作成されることに注意してください。 また、Goodspace の Test 型にアクセスするには、名前空間の名前が必要です。
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());
}
}
}