Bahasa C
Refleksi objek digunakan untuk mendapatkan informasi tipe saat runtime. Kelas yang memberikan akses ke metadata program yang sedang berjalan ada di System.Reflection ruang nama.
Refleksi Sistem namespace berisi kelas yang memungkinkan Anda memperoleh informasi tentang aplikasi dan secara dinamis menambahkan tipe, nilai, dan objek ke aplikasi.
Refleksi memiliki aplikasi berikut
Ini memungkinkan melihat informasi atribut saat runtime.
Hal ini memungkinkan memeriksa berbagai jenis dalam perakitan dan instantiate jenis ini.
Ini memungkinkan pengikatan terlambat ke metode dan properti
Ini memungkinkan pembuatan tipe baru saat runtime dan kemudian melakukan beberapa tugas menggunakan tipe tersebut.
Kami telah menyebutkan di bab sebelumnya bahwa menggunakan refleksi Anda dapat melihat informasi atribut.
Info Anggota objek System.Reflection kelas perlu diinisialisasi untuk menemukan atribut yang terkait dengan kelas. Untuk melakukan ini, Anda mendefinisikan objek dari kelas target, sebagai −
System.Reflection.MemberInfo info = typeof(MyClass);
Program berikut menunjukkan ini
using System; [AttributeUsage(AttributeTargets.All)] public class HelpAttribute : System.Attribute { public readonly string Url; public string Topic // Topic is a named parameter { get { return topic; } set { topic = value; } } public HelpAttribute(string url) // url is a positional parameter { this.Url = url; } private string topic; } [HelpAttribute("Information on the class MyClass")] class MyClass { } namespace AttributeAppl { class Program { static void Main(string[] args) { System.Reflection.MemberInfo info = typeof(MyClass); object[] attributes = info.GetCustomAttributes(true); for (int i = 0; i < attributes.Length; i++) { System.Console.WriteLine(attributes[i]); } Console.ReadKey(); } } }
Saat dikompilasi dan dijalankan, ini menampilkan nama atribut khusus yang dilampirkan ke kelas Kelas Saya
HelpAttribute
Dalam contoh ini, kami menggunakan DeBugInfo atribut yang dibuat di bab sebelumnya dan menggunakan refleksi untuk membaca metadata di Persegi Panjang kelas.
Demo Langsungusing System; using System.Reflection; namespace BugFixApplication { //a custom attribute BugFix to be assigned to a class and its members [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; } } } [DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")] [DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")] class Rectangle { //member variables protected double length; protected double width; public Rectangle(double l, double w) { length = l; width = w; } [DeBugInfo(55, "Zara Ali", "19/10/2012", Message = "Return type mismatch")] public double GetArea() { return length * width; } [DeBugInfo(56, "Zara Ali", "19/10/2012")] public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(4.5, 7.5); r.Display(); Type type = typeof(Rectangle); //iterating through the attribtues of the Rectangle class foreach (Object attributes in type.GetCustomAttributes(false)) { DeBugInfo dbi = (DeBugInfo)attributes; if (null != dbi) { Console.WriteLine("Bug no: {0}", dbi.BugNo); Console.WriteLine("Developer: {0}", dbi.Developer); Console.WriteLine("Last Reviewed: {0}", dbi.LastReview); Console.WriteLine("Remarks: {0}", dbi.Message); } } //iterating through the method attribtues foreach (MethodInfo m in type.GetMethods()) { foreach (Attribute a in m.GetCustomAttributes(true)) { DeBugInfo dbi = (DeBugInfo)a; if (null != dbi) { Console.WriteLine("Bug no: {0}, for Method: {1}", dbi.BugNo, m.Name); Console.WriteLine("Developer: {0}", dbi.Developer); Console.WriteLine("Last Reviewed: {0}", dbi.LastReview); Console.WriteLine("Remarks: {0}", dbi.Message); } } } Console.ReadLine(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Length: 4.5 Width: 7.5 Area: 33.75 Bug No: 49 Developer: Nuha Ali Last Reviewed: 10/10/2012 Remarks: Unused variable Bug No: 45 Developer: Zara Ali Last Reviewed: 12/8/2012 Remarks: Return type mismatch Bug No: 55, for Method: GetArea Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks: Return type mismatch Bug No: 56, for Method: Display Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks:
Bahasa C
Apa itu Refleksi di Java? Refleksi Java adalah proses menganalisis dan memodifikasi semua kemampuan kelas saat runtime. Reflection API di Java digunakan untuk memanipulasi kelas dan anggotanya yang meliputi bidang, metode, konstruktor, dll. saat runtime. Salah satu keuntungan dari API refleksi di
Abstrak Untuk meningkatkan kinerja penginderaan indeks bias dari susunan partikel sederhana, sebuah struktur, yang terdiri dari Au/SiO2 lapisan susunan segitiga dan substrat Au refleksi, dengan bertambahnya ukuran dan ujung segitiga yang memanjang, dipelajari. Array segitiga dimodelkan setelah jeja
Abstrak Merancang modulator gelombang elektromagnetik yang kuat diperlukan untuk kemajuan teknologi komunikasi optik. Dalam karya ini, kami mempelajari bagaimana memodulasi amplitudo gelombang elektromagnetik secara efisien di wilayah inframerah-dekat, dengan interaksi antara transisi interband gra
Abstrak MoS2 dan ReS2 adalah chalcogenides logam transisi khas dengan banyak sifat listrik dan optik yang sangat baik. Karena simetri kisi yang berbeda, ReS2 menawarkan satu dimensi lebih dari MoS2 untuk menyesuaikan sifat fisiknya. Dalam makalah ini, kami mempelajari spektrum refleksi terpolarisas