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