Cara bekerja dengan atribut di C #

Atribut adalah ciri yang kuat dalam bahasa pengaturcaraan C # yang dapat menambahkan maklumat metadata ke kumpulan anda.

Atribut sebenarnya adalah objek yang dikaitkan dengan salah satu elemen ini: Perhimpunan, Kelas, Kaedah, Delegasi, Enum, Peristiwa, Medan, Antaramuka, Harta dan Struktur. Mereka boleh digunakan untuk mengaitkan maklumat deklaratif - anda boleh mendapatkan maklumat tersebut pada waktu runtime pada masa yang akan datang jika perlu menggunakan pantulan. Dengan kata lain, anda boleh menggunakan atribut untuk menyuntikkan maklumat tambahan ke kumpulan yang dapat ditanyakan pada waktu berjalan jika diperlukan menggunakan pantulan. Atribut terdiri daripada namanya dan pilihan parameter senarai. Nama atribut sesuai dengan kelas atribut.

Anda boleh memanfaatkan atribut untuk mengesahkan objek perniagaan dalam aplikasi anda. Terdapat dua jenis atribut - atribut intrinsik dan atribut khusus. Walaupun yang pertama tersedia sebagai bagian dari kerangka .Net, yang terakhir dapat dilaksanakan dengan memperoleh kelas dari kelas System.Attribute. MSDN menyatakan: "Atribut adalah sekeping maklumat deklaratif tambahan yang ditentukan untuk deklarasi."

Sekarang mari kita masuk ke beberapa kod. Atribut Usang dapat digunakan untuk menunjukkan suatu metode sebagai usang - yang tidak boleh digunakan lagi kerana tidak lagi diperlukan atau mungkin mempunyai beberapa alternatif lain. Coretan kod berikut menggambarkan bagaimana anda boleh menggunakan atribut Usang di atas deklarasi kaedah.

[Obsolete("This method is obsolete...")]

        public static void DoSomeWork()

        {

            //Some code

        }

Sekiranya anda menggunakan kaedah ini dalam kod anda dan menyusun program anda, anda akan melihat peringatan yang dipaparkan di tetingkap keluaran Visual Studio IDE. Jadi, anda boleh mengabaikan amaran ini jika anda mahu. Sekarang, bagaimana jika anda mahu pembangun anda tidak menggunakan kaedah ini sama sekali? Oleh itu, anda boleh menggunakan parameter kedua (walaupun pilihan) sambil menyatakan atribut Usang. Inilah versi kaedah DoSomeWork () yang diubah suai. Perhatikan penggunaan parameter Boolean kali ini.

[Obsolete("This method is obsolete...", true)]

        public static void DoSomeWork()

        {

                       //Some code

        }                                                                                                                        

Apabila anda memberikan "true" sebagai parameter pilihan kedua kali ini dan menyusun program anda, kod tersebut sama sekali tidak akan disusun. Itulah yang anda mahu lakukan, bukan?

Atribut tersuai

Di bahagian ini kita akan meneroka bagaimana kita dapat menerapkan atribut khusus. Atribut khusus adalah kelas yang mewarisi kelas System.Attribute. Oleh itu, untuk melaksanakan kelas atribut khusus, buat kelas baru dan dapatkannya dari kelas System.Attribute seperti yang ditunjukkan di bawah.

using System;

public class CustomAttribute : Attribute

{

}

Untuk mengawal penggunaan atribut tersuai, anda dapat memanfaatkan kelas AttributeUsage. Kelas ini mengandungi sifat seperti, ValidOn, AllowMultiple dan Inherited yang boleh digunakan untuk mengawal penggunaan atribut tersuai anda.

Coretan kod berikut menggambarkan versi yang diubah suai dari kelas atribut khusus kami. Perhatikan penggunaan konstruktor yang menerima rentetan sebagai argumen dan memberikannya kepada anggota rentetan peribadi kelas. Ini hanya untuk tujuan ilustrasi sahaja.

[AttributeUsage(AttributeTargets.All)]

    public class CustomAttribute : Attribute

    {

        private string text;

        public CustomAttribute(string text)

        {

            this.Text = text;

        }

        public string Text

        {

            get

            {

                return this.text;

            }

            set

            {

                this.text = value;

            }

        }

    }

Anda juga dapat menentukan sasaran atribut yang harus diterapkan atribut khusus Anda. Inilah cara anda boleh melakukannya.

[AttributeUsage(AttributeTargets.Class |

AttributeTargets.Constructor |

AttributeTargets.Field |

AttributeTargets.Method |

AttributeTargets.Property,

AllowMultiple = true)]

    public class CustomAttribute : Attribute

    {

        private string text;

        public CustomAttribute(string text)

        {

            this.Text = text;

        }

        public string Text

        {

            get

            {

                return this.text;

            }

            set

            {

                this.text = value;

            }

        }

    }

Anda kini dapat menggunakan refleksi untuk menampilkan semua atribut yang diterapkan pada objek tertentu menggunakan potongan kode berikut.

MemberInfo memberInfo = typeof(CustomAttribute);

object[] attributes = memberInfo.GetCustomAttributes(true);

for (int i = 0, j = attributes.Length; i < j; i++)

  {

     Console.WriteLine(attributes[i]);

  }

Sekarang pertimbangkan kelas berikut di mana kita akan menerapkan atribut khusus kita.

[CustomAttribute("Hello World...")]

public class SomeClass

{

}

Perhatikan bagaimana atribut khusus telah digunakan dan teks disampaikan sebagai argumen kepadanya. Coretan kod berikut menggambarkan bagaimana anda boleh mencetak kandungan harta teks.

MemberInfo memberInfo = typeof(SomeClass);

object[] attributes = memberInfo.GetCustomAttributes(true);

foreach (object attribute in attributes)

{

CustomAttribute customAttribute = attribute as CustomAttribute;

if (customAttribute != null)

Console.WriteLine("Text = {0}", customAttribute.Text);

else

Console.WriteLine();

}