CA1050:類型必須在命名空間中宣告

屬性
規則識別碼 CA1050
標題 類型必須在命名空間中宣告
類別 設計
修正程式是中斷或非中斷 中斷
預設在 .NET 8 中啟用 建議

原因

公用或受保護的類型定義于具名命名空間的範圍之外。

檔案描述

類型會在命名空間中宣告,以防止名稱衝突,並做為在物件階層中組織相關類型的方式。 任何具名命名空間以外的類型都位於無法在程式碼中參考的全域命名空間中。

如何修正違規

若要修正此規則的違規,請將類型放在命名空間中。

隱藏警告的時機

雖然您永遠不需要隱藏此規則的警告,但是當元件永遠不會與其他元件一起使用時,請務必執行此動作。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#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