Tutorial C#login
Tutorial C#
pengarang:php.cn  masa kemas kini:2022-04-11 14:06:23

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

Atribut pratakrif

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).

Contohnya:

[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property, 
AllowMultiple = true)]

Bersyarat

Atribut 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();
    }
}

Obsolete

Atribut 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 2

di 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).

Contoh berikut menunjukkan ciri ini:

[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.

Laman web PHP Cina