রিফ্লেকশন হলো যখন ম্যানেজড কোড নিজস্ব মেটাডেটা পড়ে অ্যাসেম্বলি খুঁজে বের করতে পারে। মূলত, এটি কোডকে একই সিস্টেমের মধ্যে অন্য কোড ইনস펙্ট করতে দেয়। C#-এ রিফ্লেকশন ব্যবহার করে আমরা ডাইনামিকভাবে একটি টাইপের ইনস্ট্যান্স তৈরি করতে পারি এবং সেটিকে একটি বিদ্যমান অবজেক্টের সাথে বাইন্ড করতে পারি। Более того, আমরা একটি বিদ্যমান অবজেক্ট থেকে টাইপ পেতে পারি এবং এর প্রোপার্টিগুলো অ্যাক্সেস করতে পারি। যখন আমরা আমাদের কোডে অ্যাট্রিবিউট ব্যবহার করি, রিফ্লেকশন আমাদের অ্যাক্সেস দেয় কারণ এটি টাইপের অবজেক্ট প্রদান করে যা মডিউল, অ্যাসেম্বলি, এবং টাইপ বর্ণনা করে।
মান लीজিয়ে আমাদের double টাইপের একটি প্রোপার্টি আছে এবং রানটাইমে আমাদের কাছে মান স্ট্রিং হিসেবে আছে এবং টাইপ পরিবর্তন করার পর প্রোপার্টিতে অ্যাসাইন করতে চাই। আমরা Convert.ChangeType() ব্যবহার করতে পারি - এটি আমাদের রানটাইম ইনফরমেশন ব্যবহার করে যেকোনো IConvertible টাইপের রিপ্রেজেন্টেশন ফরম্যাট পরিবর্তন করতে দেয়।
উদাহরণ
using System;
using System.Reflection;
namespace DemoApplication
{
class Program
{
static void Main()
{
Circle circle = new Circle();
string value = "6.5";
PropertyInfo propertyInfo = circle.GetType().GetProperty("Radius");
propertyInfo.SetValue(circle, Convert.ChangeType(value, propertyInfo.PropertyType), null);
var radius = circle.GetType().GetProperty("Radius").GetValue(circle, null);
Console.WriteLine($"Radius: {radius}");
Console.ReadLine();
}
}
class Circle
{
public double Radius { get; set; }
}
}
আউটপুট
Radius: 6.5
উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে স্ট্রিং মান "6.5" Convert.ChangeType ব্যবহার করে ডবল টাইপে কনভার্ট होकर রানটাইমে রিফ্লেকশন ব্যবহার করে Radius প্রোপার্টিতে অ্যাসাইন করা হয়েছে।