Atribut C#
Atribut digunakan untuk menghantar pelbagai elemen dalam atur cara semasa runtime ( Tag Deklaratif untuk tingkah laku maklumat seperti kelas, kaedah, struktur, penghitungan, komponen, dll.). Anda boleh menambah maklumat deklaratif pada program anda dengan menggunakan atribut. Teg perisytiharan diterangkan dengan kurungan segi empat sama ([ ]) diletakkan di hadapan elemen yang digunakan.
Atribut digunakan untuk menambah metadata, seperti arahan dan ulasan pengkompil, penerangan, kaedah, kelas dan maklumat lain. Rangka kerja .Net menyediakan dua jenis ciri: Pratakrif ciri dan Tersuai ciri.
Nyatakan atribut (Atribut)
Sintaks menentukan atribut (Atribut) adalah seperti berikut:
[attribute(positional_parameters, name_parameter = value, ...)] element
Nama dan nilai atribut (Atribut) dinyatakan dalam kurungan segi empat sama, diletakkan di mana ia sebelum elemen yang digunakan. positional_parameters menentukan maklumat yang diperlukan, name_parameters menentukan maklumat pilihan.
Atribut yang dipratentukan (Atribut)
.Rangka kerja bersih menyediakan tiga atribut yang dipratentukan:
Penggunaan Atribut
- ><🎜 Bersyarat
- Usang
AttributeUsage menerangkan cara menggunakan atribut tersuai Ia menentukan jenis item yang boleh digunakan ciri tersebut.
Sintaks untuk menentukan atribut ini adalah seperti berikut:[AttributeUsage( validon, AllowMultiple=allowmultiple, Inherited=inherited )]di mana:
- Pengesahan parameter menentukan elemen bahasa di mana atribut boleh diletakkan. Ia adalah gabungan nilai-nilai enumerator
AttributeTargets. Nilai lalai ialah AttributeTargets.All.
- Parameter
allowmultiple (pilihan) Menyediakan nilai boolean untuk sifat AllowMultiple ciri ini. Jika benar, atribut adalah pelbagai guna. Nilai lalai adalah palsu (penggunaan sekali).
- Parameter
diwarisi (pilihan) Menyediakan nilai boolean untuk sifat Diwarisi ciri ini. Jika benar, atribut ini boleh diwarisi oleh kelas terbitan. Nilai lalai adalah palsu (tidak diwarisi).
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]BersyaratAtribut pratakrif ini menandakan kaedah bersyarat yang pelaksanaannya bergantung pada pengecam prapemproses yang diutamakan. Ia menyebabkan kompilasi bersyarat bagi panggilan kaedah, bergantung pada nilai yang ditentukan, seperti
Nyahpepijat atau Surih. Contohnya, paparkan nilai pembolehubah semasa menyahpepijat kod.
Sintaks untuk menentukan ciri ini adalah seperti berikut:[Conditional( conditionalSymbol )]Contohnya:
[Conditional("DEBUG")]Contoh berikut menunjukkan ciri ini:
rreee
Apabila di atas Kod disusun dan apabila dilaksanakan, ia menghasilkan keputusan berikut:#define DEBUG using System; using System.Diagnostics; public class Myclass { [Conditional("DEBUG")] public static void Message(string msg) { Console.WriteLine(msg); } } class Test { static void function1() { Myclass.Message("In Function 1."); function2(); } static void function2() { Myclass.Message("In Function 2."); } public static void Main() { Myclass.Message("In Main function."); function1(); Console.ReadKey(); } }ObsoleteAtribut pratakrif ini menandakan entiti program yang tidak sepatutnya digunakan. Ia membolehkan anda memberitahu pengkompil untuk membuang elemen sasaran tertentu. Sebagai contoh, apabila kaedah baharu digunakan dalam kelas, tetapi anda masih mahu mengekalkan kaedah lama dalam kelas, anda boleh menandakannya sebagai usang dengan memaparkan mesej bahawa kaedah baharu itu harus digunakan dan bukannya kaedah lama ). Sintaks untuk menentukan ciri ini adalah seperti berikut:
In Main function In Function 1 In Function 2di mana:
- Parameter
mesej, ialah rentetan yang menerangkan projek Sebab mengapa ia usang dan apa yang perlu digunakan.
- Parameter
iserror ialah nilai Boolean. Jika nilai ini benar, pengkompil harus menganggap penggunaan item ini sebagai ralat. Nilai lalai adalah palsu (pengkompil menjana amaran).
[Obsolete( message )] [Obsolete( message, iserror )]Apabila anda cuba menyusun atur cara ini, pengkompil akan memberikan mesej ralat yang menyatakan:
using System; public class MyClass { [Obsolete("Don't use OldMethod, use NewMethod instead", true)] static void OldMethod() { Console.WriteLine("It is the old method"); } static void NewMethod() { Console.WriteLine("It is the new method"); } public static void Main() { OldMethod(); } }
Buat atribut tersuai (Atribut)
Rangka kerja .Net membenarkan penciptaan atribut tersuai yang menyimpan maklumat deklaratif yang boleh diambil semula semasa masa jalan. Maklumat ini boleh dikaitkan dengan mana-mana elemen sasaran berdasarkan kriteria reka bentuk dan keperluan aplikasi.
Mencipta dan menggunakan ciri tersuai melibatkan empat langkah:
Mengisytiharkan ciri tersuai
Membina ciri tersuai
Gunakan atribut tersuai pada elemen program sasaran
Akses atribut melalui refleksi
Yang terakhir Langkah-langkah termasuk menulis a atur cara mudah untuk membaca metadata untuk mencari pelbagai simbol. Metadata ialah data dan maklumat yang digunakan untuk menerangkan data lain. Program ini harus menggunakan refleksi untuk mengakses sifat semasa runtime. Kami akan membincangkan perkara ini secara terperinci dalam bab seterusnya.
Isytiharkan atribut tersuai
Atribut tersuai baharu harus diperoleh daripada kelas System.Attribute. Contohnya:
Don't use OldMethod, use NewMethod instead
Dalam kod di atas, kami telah mengisytiharkan atribut tersuai yang dipanggil DeBugInfo.
Bina Atribut Tersuai
Mari bina atribut tersuai yang dipanggil DeBugInfo yang akan menyimpan maklumat yang diperoleh oleh penyahpepijat. Ia menyimpan maklumat berikut:
Nombor kod pepijat
Nama pembangun yang mengenal pasti pepijat
-
Tarikh kod ini terakhir disemak
Mesej rentetan yang menyimpan bendera pembangun
KamiDeBugInfo Kelas akan mempunyai tiga sifat peribadi (harta) yang digunakan untuk menyimpan tiga mesej pertama dan satu harta awam (harta) yang digunakan untuk menyimpan mesej. Jadi nombor pepijat, nama pembangun dan tarikh semakan akan memerlukan parameter kedudukan kelas DeBugInfo, dan mesej itu akan menjadi parameter bernama pilihan.
Setiap sifat mesti mempunyai sekurang-kurangnya satu pembina. Parameter kedudukan yang diperlukan hendaklah diluluskan melalui pembina. Kod berikut menunjukkan kelas DeBugInfo:
// 一个自定义特性 BugFix 被赋给类及其成员 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class DeBugInfo : System.Attribute
Menggunakan atribut tersuai
Gunakan atribut dengan meletakkannya segera sebelum sasarannya:
// 一个自定义特性 BugFix 被赋给类及其成员 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class DeBugInfo : System.Attribute { private int bugNo; private string developer; private string lastReview; public string message; public DeBugInfo(int bg, string dev, string d) { this.bugNo = bg; this.developer = dev; this.lastReview = d; } public int BugNo { get { return bugNo; } } public string Developer { get { return developer; } } public string LastReview { get { return lastReview; } } public string Message { get { return message; } set { message = value; } } }
Dalam bab seterusnya, kami akan menggunakan objek kelas Refleksi untuk mendapatkan maklumat ini.