CA1050:名前空間で型を宣言します

プロパティ
ルール ID CA1050
Title 名前空間で型を宣言します
[カテゴリ] デザイン
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 提案として

原因

ある public または protected 型が、名前付き名前空間の範囲外で定義されています。

規則の説明

型を名前空間内で宣言するのは、名前が衝突しないようにするためと、関連する型をオブジェクト階層形式で編成するためです。 名前付き名前空間の外にある型は、コード内で参照できないグローバル名前空間に含まれます。

違反の修正方法

この規則違反を修正するには、名前空間に型を配置します。

どのようなときに警告を抑制するか

この規則からの警告を非表示にする必要はありませんが、アセンブリが他のアセンブリと共に使用されることが決してない場合、非表示にしても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

例 1

次の例では、名前空間の外で間違って宣言されている型と、名前空間で同じ名前が宣言されている型が含まれるライブラリを確認できます。

// Violates rule: DeclareTypesInNamespaces.
using System;

public class Test
{
    public override string ToString()
    {
        return "Test does not live in a namespace!";
    }
}

namespace ca1050
{
    public class Test
    {
        public override string ToString()
        {
            return "Test lives in a namespace!";
        }
    }
}
' 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 ca1050

    Public Class Test

        Public Overrides Function ToString() As String
            Return "Test lives in a namespace!"
        End Function

    End Class

End Namespace

例 2

次のアプリケーションでは、以前に定義されたライブラリが使用されます。 名前空間の外で宣言された型は、名前 Test が名前空間で修飾されていないときに作成されます。 名前空間内で宣言された Test 型にアクセスするには、名前空間の名前が必要です。

public class MainHolder
{
    public static void Main1050()
    {
        Test t1 = new Test();
        Console.WriteLine(t1.ToString());

        ca1050.Test t2 = new ca1050.Test();
        Console.WriteLine(t2.ToString());
    }
}
Public Class MainHolder

    Public Shared Sub Main1050()
        Dim t1 As New Test()
        Console.WriteLine(t1.ToString())

        Dim t2 As New ca1050.Test()
        Console.WriteLine(t2.ToString())
    End Sub

End Class