Bagikan melalui


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