আমরা Reflection ব্যবহার করে একটি প্রোপার্টির ভ্যালু ডাইনামিক্যালি ফেচ করতে পারি।
Reflection অবজেক্টস (টাইপ `Type`) প্রদান করে যা অ্যাসেম্বলি, মডিউল এবং টাইপ ডেসক্রাইব করে। আমরা রিফ্লেকশন ব্যবহার করে ডাইনামিক্যালি একটি টাইপের ইনস্ট্যান্স তৈরি করতে পারি, টাইপকে একটি এক্সিস্টিং অবজেক্টের সাথে বাইন্ড করতে পারি, বা একটি এক্সিস্টিং অবজেক্ট থেকে টাইপ পেয়ে এর মেথডস ইনভোক করতে পারি বা এর ফিল্ডস এবং প্রোপার্টিগুলো অ্যাক্সেস করতে পারি। যদি আমরা আমাদের কোডে অ্যাট্রিবিউট ব্যবহার করি, রিফ্লেকশন আমাদের সেগুলো অ্যাক্সেস করতে সক্ষম করে।
`System.Reflection` নেমস্পেস এবং `System.Type` ক্লাস .NET Reflection-এ গুরুত্বপূর্ণ ভূমিকা পালন করে। এই দুটি একসাথে কাজ করে এবং আমাদের একটি টাইপের অনেক দিকের ওপর রিফ্লেক্ট করতে দেয়।
উদাহরণ
using System;
using System.Text;
namespace DemoApplication
{
public class Program
{
static void Main(string[] args)
{
var employeeType = typeof(Employee);
var employee = Activator.CreateInstance(employeeType);
SetPropertyValue(employeeType, "EmployeeId", employee, 1);
SetPropertyValue(employeeType, "EmployeeName", employee, "Mark");
GetPropertyValue(employeeType, "EmployeeId", employee);
GetPropertyValue(employeeType, "EmployeeName", employee);
Console.ReadLine();
}
static void SetPropertyValue(Type type, string propertyName, object instanceObject, object value)
{
type.GetProperty(propertyName).SetValue(instanceObject, value);
}
static void GetPropertyValue(Type type, string propertyName, object instanceObject)
{
Console.WriteLine($"Value of Property {propertyName}: {type.GetProperty(propertyName).GetValue(instanceObject, null)}");
}
}
public class Employee
{
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
}
}
আউটপুট
Value of Property EmployeeId: 1
Value of Property EmployeeName: Mark
উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে `Employee` প্রোপার্টিগুলোর ভ্যালু রিফ্লেকশন ব্যবহার করে টাইপ এবং প্রোপার্টি নাম দিয়ে সেট করা হয়েছে। একইভাবে প্রোপার্টি ভ্যালু ফেচ করার জন্য রিফ্লেকশন ক্লাসের GetProperty() মেথড ব্যবহার করা হয়েছে। এর মাধ্যমে আমরা রানটাইমে যেকোনো প্রোপার্টির ভ্যালু ফেচ করতে পারি।