Aturan desain

Aturan desain mendukung kepatuhan terhadap pedoman desain .NET Framework.

Di bagian ini

Aturan Deskripsi
CA1000: Jangan deklarasikan anggota statis pada jenis generik Ketika anggota statik dari jenis generik dipanggil, argumen jenis harus ditentukan untuk jenis tersebut. Ketika anggota instans generik yang tidak mendukung inferensi dipanggil, argumen jenis harus ditentukan untuk anggota tersebut. Dalam dua kasus ini, sintaks untuk menentukan argumen jenis berbeda dan dapat membingungkan.
CA1001: Jenis yang memiliki bidang sekali pakai sifatnya harus sekali pakai Kelas mendeklarasikan dan mengimplementasikan bidang instans yang merupakan jenis System.IDisposable dan kelas tidak mengimplementasikan IDisposable. Kelas yang mendeklarasikan bidang IDisposable secara tidak langsung memiliki sumber daya yang tidak dikelola dan harus menerapkan antarmuka IDisposable.
CA1002: Jangan mengekspos daftar generik System.Collections.Generic.List<(Dari <(T>)>) adalah kumpulan generik yang dirancang untuk performa, bukan warisan. Oleh karena itu, Daftar tidak berisi anggota virtual. Kumpulan generik yang dirancang untuk warisan harus diperlihatkan sebagai gantinya.
CA1003: Menggunakan instans penanganan aktivitas generik Jenis berisi delegasi yang mengembalikan kekosongan, yang tanda tangannya berisi dua parameter (objek pertama dan jenis kedua yang dapat ditetapkan ke EventArgs), dan rakitan yang berisi menargetkan .NET Framework 2.0.
CA1005: Menghindari parameter yang berlebihan pada jenis generik Semakin banyak parameter jenis yang dimiliki oleh jenis generik, semakin sulit untuk mengetahui dan mengingat apa yang diwakili oleh setiap parameter jenis. Biasanya jelas dengan satu parameter jenis, seperti dalam Daftar<T>, dan dalam kasus tertentu dengan dua parameter jenis, seperti dalam Dictionary<TKey, TValue>. Namun, jika ada lebih dari dua parameter jenis, kesulitannya menjadi terlalu besar bagi sebagian besar pengguna.
CA1008: Enum harus memiliki nilai nol Nilai default dari enumerasi yang batal diinisialisasi, sama seperti jenis nilai lainnya, adalah nol. Enumerasi yang diatribusikan nonflags harus menentukan anggota dengan menggunakan nilai nol sehingga nilai default adalah nilai enumerasi yang valid. Jika enumerasi yang memiliki atribut FlagsAttribute diterapkan menentukan anggota bernilai nol, nama enumerasi harus "None" untuk menunjukkan bahwa tidak ada nilai yang ditetapkan dalam enumerasi.
CA1010: Pengumpulan harus menerapkan antarmuka generik Untuk memperluas kegunaan kumpulan, terapkan salah satu antarmuka kumpulan generik. Kemudian kumpulan tersebut dapat digunakan untuk mengisi jenis kumpulan generik.
CA1012: Jenis abstrak tidak boleh memiliki konstruktor publik Konstruktor pada jenis abstrak hanya dapat dipanggil oleh jenis turunan. Karena konstruktor publik membuat instans dari jenis, dan Anda tidak dapat membuat instans dari jenis abstrak, jenis abstrak yang memiliki konstruktor publik dirancang dengan tidak benar.
CA1014: Tandai rakitan dengan CLSCompliantAttribute Common Language Specification (CLS) menentukan batasan penamaan, jenis data, dan aturan yang harus dipatuhi oleh rakitan jika akan digunakan di seluruh bahasa pemrogram. Desain yang baik menentukan bahwa semua rakitan secara eksplisit menunjukkan kepatuhan CLS dengan menggunakan CLSCompliantAttribute. Jika atribut ini tidak ada di rakitan, rakitan tidak sesuai.
CA1016: Tandai rakitan dengan AssemblyVersionAttribute .NET menggunakan nomor versi untuk mengidentifikasi rakitan secara unik, dan untuk mengikat ke jenis dalam rakitan yang sangat bernama. Nomor versi digunakan bersama dengan versi dan kebijakan penerbit. Secara default, aplikasi hanya berjalan dengan versi rakitan yang digunakan untuk membuat rakitan.
CA1017: Menandai rakitan dengan ComVisibleAttribute ComVisibleAttribute menentukan cara klien COM mengakses kode terkendali. Desain yang baik menentukan bahwa rakitan secara eksplisit menunjukkan visibilitas COM. Visibilitas COM dapat diatur untuk seluruh rakitan dan kemudian diganti untuk setiap jenis dan anggota jenis. Jika atribut ini tidak ada, konten rakitan dapat dilihat oleh klien COM.
CA1018: Tandai atribut dengan AttributeUsageAttribute Saat Anda menentukan atribut kustom, tandai dengan menggunakan AttributeUsageAttribute untuk menunjukkan tempat atribut kustom dapat diterapkan dalam kode sumber. Arti dan tujuan penggunaan atribut akan menentukan lokasi valid atribut dalam kode.
CA1019: Tentukan pengakses untuk argumen atribut Atribut dapat menentukan argumen wajib yang harus ditentukan saat Anda menerapkan atribut ke target. Hal ini juga dikenal sebagai argumen posisi karena diberikan ke konstruktor atribut sebagai parameter posisi. Untuk setiap argumen wajib, atribut juga harus menyediakan properti baca-saja yang sesuai sehingga nilai argumen dapat diambil pada waktu eksekusi. Atribut juga dapat menentukan argumen opsional, yang juga dikenal sebagai argumen bernama. Argumen ini diberikan ke konstruktor atribut dengan nama dan harus memiliki properti baca/tulis yang sesuai.
CA1021: Hindari parameter keluar Meneruskan jenis dengan referensi (menggunakan out atau ref) membutuhkan pengalaman dengan pointer, memahami bagaimana jenis nilai dan jenis referensi berbeda, dan menangani metode dengan beberapa nilai kembalian. Selain itu, perbedaan antara parameter out dan ref tidak dipahami secara luas.
CA1024: Gunakan properti jika sesuai Metode publik atau dilindungi memiliki nama yang dimulai dengan "Dapatkan", tidak mengambil parameter, dan mengembalikan nilai yang bukan larik. Metode mungkin menjadi kandidat yang baik untuk menjadi properti.
CA1027: Tandai enum dengan FlagsAttribute Enumerasi adalah jenis nilai yang menentukan sekumpulan konstanta bernama terkait. Terapkan FlagsAttribute ke enumerasi ketika konstanta bernama enumerasi dapat digabungkan secara bermakna.
CA1028: Penyimpanan enum harus Int32 Enumerasi adalah jenis nilai yang menentukan sekumpulan konstanta bernama terkait. Secara default, jenis data System.Int32 digunakan untuk menyimpan nilai konstanta. Meskipun Anda dapat mengubah jenis yang mendasarinya, itu tidak diperlukan atau direkomendasikan untuk sebagian besar skenario.
CA1030: Gunakan peristiwa jika perlu Aturan ini mendeteksi metode yang memiliki nama yang biasanya akan digunakan untuk peristiwa. Jika metode dipanggil sebagai respons terhadap perubahan status yang ditentukan dengan jelas, metode tersebut harus dipanggil oleh penanganan aktivitas. Objek yang memanggil metode harus memunculkan peristiwa, bukan memanggil metode secara langsung.
CA1031: Jangan tangkap jenis pengecualian umum Pengecualian umum tidak boleh ditangkap. Tangkap pengecualian yang lebih spesifik, atau tangkap kembali pengecualian umum sebagai pernyataan terakhir di blok tangkapan.
CA1032: Terapkan konstruktor pengecualian standar Kegagalan untuk menyediakan kumpulan lengkap konstruktor dapat mempersulit dalam menangani pengecualian dengan benar.
CA1033: Metode antarmuka harus dapat dipanggil berdasarkan jenis turunan Jenis yang terlihat secara eksternal yang tidak disegel menyediakan penerapan metode eksplisit dari antarmuka publik dan tidak memberikan metode alternatif yang terlihat secara eksternal yang memiliki nama yang sama.
CA1034: Jenis berlapis tidak boleh terlihat Jenis berlapis adalah jenis yang dideklarasikan dalam cakupan jenis lain. Jenis berlapis berguna untuk menyertakan detail penerapan privat dari jenis yang disimpan. Digunakan untuk tujuan ini, jeni berlapis tidak boleh terlihat secara eksternal.
CA1036: Ganti metode pada jenis yang sebanding Jenis publik atau dilindungi menerapkan antarmuka System.IComparable. Jenis tersebut tidak mengganti Object.Equals juga tidak membebani operator khusus bahasa untuk kesetaraan, ketidaksetaraan, kurang dari, atau lebih besar dari.
CA1040: Menghindari antarmuka kosong Antarmuka menentukan anggota yang menyediakan perilaku atau kontrak penggunaan. Fungsionalitas yang dijelaskan oleh antarmuka dapat diadopsi oleh jenis apa pun, di mana pun jenis tersebut muncul dalam hierarki warisan. Jenis menerapkan antarmuka dengan menyediakan penerapan untuk anggota antarmuka. Antarmuka kosong tidak menentukan anggota apa pun; oleh karena itu, antarmuka kosong tidak menentukan kontrak yang dapat diterapkan.
CA1041: Berikan pesan ObsoleteAttribute Jenis atau anggota ditandai dengan menggunakan atribut System.ObsoleteAttribute yang tidak memiliki properti ObsoleteAttribute.Message yang ditentukan. Saat jenis atau anggota yang ditandai dengan menggunakan ObsoleteAttribute dikompilasi, properti Pesan atribut ditampilkan, yang memberikan informasi pengguna tentang jenis atau anggota yang kedaluwarsa.
CA1043: Gunakan argumen integral atau string untuk pengindeks Pengindeks (yaitu, properti yang diindeks) harus menggunakan jenis integral atau string untuk indeks. Jenis ini biasanya digunakan untuk mengindeks struktur data dan meningkatkan kegunaan pustaka. Penggunaan jenis Objek harus dibatasi pada kasus-kasus di mana integral tertentu atau jenis string tidak dapat ditentukan pada waktu desain.
CA1044: Properti tidak boleh tulis saja Meskipun dapat diterima dan sering kali diperlukan untuk memiliki properti baca-saja, panduan desain melarang penggunaan properti tulis saja. Ini karena membiarkan pengguna menetapkan nilai, lalu mencegah pengguna melihat nilai tersebut, tidak memberikan keamanan apa pun. Selain itu, tanpa akses baca, status objek bersama tidak dapat dilihat, yang membatasi kegunaannya.
CA1045: Jangan teruskan jenis dengan referensi Meneruskan jenis dengan referensi (menggunakan out atau ref) membutuhkan pengalaman dengan pointer, memahami bagaimana jenis nilai dan jenis referensi berbeda, dan menangani metode dengan beberapa nilai kembalian. Arsitek pustaka yang merancang untuk audiens umum seharusnya tidak mengharapkan pengguna menjadi malu dalam bekerja dengan parameter out atau ref.
CA1046: Jangan membebani sama dengan operator dengan jenis referensi Untuk jenis referensi, penerapan default dari operator kesetaraan hampir selalu benar. Secara default, dua referensi sama hanya jika keduanya mengarah ke objek yang sama.
CA1047: Jangan deklarasikan anggota yang dilindungi dalam jenis yang disegel Jenis mendeklarasikan anggota yang dilindungi sehingga jenis yang mewarisi dapat mengakses atau mengganti anggota. Berdasarkan definisi, jenis yang disegel tidak dapat diwariskan, yang berarti bahwa metode yang dilindungi pada jenis yang disegel tidak dapat dipanggil.
CA1050: Deklarasikan jenis di namespace Jenis dideklarasikan dalam namespace untuk mencegah benturan nama dan sebagai cara untuk mengatur jenis terkait dalam hierarki objek.
CA1051: Jangan nyatakan bidang instans yang terlihat Penggunaan utama bidang harus sebagai detail penerapan. Bidang harus privat atau internal dan harus diperlihatkan dengan menggunakan properti.
CA1052: Jenis pemegang statik harus disegel Jenis publik atau terproteksi hanya berisi anggota statis dan tidak dideklarasikan dengan menggunakan pengubah yang disegel (C#) atau NotInheritable (Visual Basic). Jenis yang tidak dimaksudkan untuk diwariskan harus ditandai dengan menggunakan pemodifikasi yang disegel untuk mencegah penggunaannya sebagai jenis dasar.
CA1053: Jenis pemegang statik tidak boleh memiliki konstruktor Jenis publik atau publik berlapis hanya mendeklarasikan anggota statik dan memiliki konstruktor default publik atau yang dilindungi. Konstruktor tidak diperlukan karena memanggil anggota statik tidak memerlukan instans dari jenis tersebut. Overload string harus memanggil overload pengidentifikasi sumber daya seragam (URI) dengan menggunakan argumen string untuk keselamatan dan keamanan.
CA1054: Parameter URI tidak boleh berupa string Jika metode mengambil representasi string dari URI, overload yang sesuai harus disediakan yang mengambil instans dari kelas URI, yang menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1055: Nilai pengembalian URI tidak boleh berupa string Aturan ini mengasumsikan bahwa metode mengembalikan URI. Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas System.Uri menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1056: Properti URI tidak boleh berupa string Aturan ini mengasumsikan bahwa properti mewakili URI. Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas System.Uri menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1058: Tipe tidak boleh memperluas tipe dasar tertentu Jenis yang terlihat secara eksternal memperluas jenis dasar tertentu. Gunakan salah satu alternatif.
CA1060: Pindahkan P/Invokes ke kelas NativeMethods Metode Pemanggilan Platform, seperti yang ditandai dengan System.Runtime.InteropServices.DllImportAttribute metode atau yang ditentukan dengan menggunakan kata kunci Deklarasikan di Visual Basic, mengakses kode yang tidak dikelola. Metode ini harus dari kelas NativeMethods, SafeNativeMethods, atau UnsafeNativeMethods.
CA1061: Jangan sembunyikan metode kelas dasar Metode dalam jenis dasar disembunyikan oleh metode dengan nama yang sama dalam jenis turunan, ketika tanda tangan parameter dari metode turunan hanya berbeda berdasarkan jenis yang diturunkan lebih lemah daripada jenis yang sesuai dalam tanda tangan parameter dari metode dasar.
CA1062: Validasi argumen metode publik Semua argumen referensi yang diteruskan ke metode yang terlihat secara eksternal harus diperiksa terhadap null.
CA1063: Terapkan IDisposable dengan benar Semua jenis IDisposable harus menerapkan pola Buang dengan benar.
CA1064: Pengecualian harus bersifat publik Pengecualian internal hanya terlihat di dalam cakupan internalnya sendiri. Setelah pengecualian berada di luar cakupan internal, hanya pengecualian dasar yang dapat digunakan untuk menangkap pengecualian. Jika pengecualian internal diwarisi dari System.Exception, System.SystemException, atau System.ApplicationException, kode eksternal tidak akan memiliki informasi yang cukup untuk mengetahui apa yang harus dilakukan dengan pengecualian tersebut.
CA1065: Jangan munculkan pengecualian di lokasi yang tidak terduga Metode yang tidak diharapkan untuk memunculkan pengecualian akan memunculkan pengecualian.
CA1066: Menerapkan IEquatable saat mengganti Sama Dengan Jenis nilai menggantikan metode Equals, tetapi tidak menerapkan IEquatable<T>.
CA1067: Mengganti Sama Dengan saat menerapkan IEquatable Jenis menerapkan IEquatable<T>, tetapi tidak mengganti metode Equals.
CA1068: Parameter CancellationToken harus menjadi yang terakhir Metode memiliki parameter CancellationToken yang bukan merupakan parameter terakhir.
CA1069: Enum tidak boleh memiliki nilai duplikat Enumerasi memiliki beberapa anggota yang secara eksplisit diberi nilai konstanta yang sama.
CA1070: Jangan deklarasikan bidang peristiwa sebagai virtual Peristiwa seperti bidang dideklarasikan sebagai virtual.