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