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
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET