CA1050: Deklarasikan jenis di namespace
Properti | Nilai |
---|---|
ID Aturan | CA1050 |
Judul | Nyatakan jenis dalam namespace layanan |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 8 | Sebagai saran |
Penyebab
Jenis publik atau terproteksi ditentukan di luar lingkup namespace bernama.
Deskripsi aturan
Jenis dideklarasikan dalam namespace untuk mencegah tabrakan nama, dan sebagai cara untuk mengatur jenis terkait dalam hierarki objek. Jenis yang berada di luar namespace layanan bernama apa pun berada di namespace layanan global yang tidak dapat dirujuk dalam kode.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, letakkan jenis dalam namespace.
Kapan harus menekan peringatan
Meskipun Anda tidak perlu menekan peringatan dari aturan ini, aman untuk melakukan ini ketika rakitan tidak akan pernah digunakan bersama dengan rakitan lain.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1050
// The code that's violating the rule is on this line.
#pragma warning restore CA1050
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1050.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh 1
Contoh berikut menunjukkan pustaka yang memiliki jenis yang salah dideklarasikan di luar namespace, dan jenis yang memiliki nama yang sama yang dideklarasikan dalam namespace.
// 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
Contoh 2
Aplikasi berikut menggunakan pustaka yang ditentukan sebelumnya. Jenis yang dideklarasikan di luar namespace dibuat ketika nama Test
tidak memenuhi syarat oleh namespace. Untuk mengakses Test
jenis yang dideklarasikan di dalam namespace, nama namespace diperlukan.
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