কম্পিউটার টিউটোরিয়াল

C#-তে টাইপ অনিশ্চিত থাকলে dynamic কীওয়ার্ড ব্যবহার

সমস্যা

C# একটি স্ট্রংলি-টাইপড ল্যাঙ্গুয়েজ — প্রতিটি ভেরিয়েবলের টাইপ কম্পাইল টাইমেই জানতে হয়। কিন্তু কখনো কখনো রানটাইমে টাইপ নির্ধারিত হয় (JSON পার্সিং, COM ইন্টারঅপ, রিফলেকশন, ডাইনামিক ল্যাঙ্গুয়েজ ইন্টারঅপ)।

সমাধান: dynamic কীওয়ার্ড

  • কম্পাইলারকে বলে: "এই ভেরিয়েবলের টাইপ রানটাইমে ডিটারমাইন হবে"
  • স্ট্যাটিক টাইপ চেকিং বাইপাস হয়
  • সকল মেম্বার অ্যাক্সেস (মেথড, প্রপার্টি, অপারেটর) রানটাইমে রিজল্ভ হয়
  • এরর কম্পাইল টাইমে না পাওয়া গিয়ে রানটাইমে ফেলা হয়

উদাহরণ


using System;

namespace DemoDynamicKeyword {
    class Program {
        static void Main(string[] args) {
            dynamic MyDynamicVar = 100;
            Console.WriteLine($"Value: {MyDynamicVar}, Type: {MyDynamicVar.GetType()}");
            // Value: 100, Type: System.Int32
            
            MyDynamicVar = "Hello World!!";
            Console.WriteLine($"Value: {MyDynamicVar}, Type: {MyDynamicVar.GetType()}");
            // Value: Hello World!!, Type: System.String
            
            MyDynamicVar = true;
            Console.WriteLine($"Value: {MyDynamicVar}, Type: {MyDynamicVar.GetType()}");
            // Value: True, Type: System.Boolean
            
            MyDynamicVar = DateTime.Now;
            Console.WriteLine($"Value: {MyDynamicVar}, Type: {MyDynamicVar.GetType()}");
            // Value: 1/15/2024, Type: System.DateTime
            
            // ডাইনামিক মেথড কল (রানটাইমে রিজল্ভ)
            MyDynamicVar = new { Name = "Test", Value = 42 };
            Console.WriteLine(MyDynamicVar.Name); // Test
            
            // অস্তিত্বহীন মেম্বার অ্যাক্সেস → RuntimeBinderException
            try {
                Console.WriteLine(MyDynamicVar.NonExistentProperty);
            } catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex) {
                Console.WriteLine($"Runtime Error: {ex.Message}");
            }
        }
    }
}

আউটপুট:

Value: 100, Type: System.Int32
Value: Hello World!!, Type: System.String
Value: True, Type: System.Boolean
Value: 1/15/2024 10:30:45 AM, Type: System.DateTime
Test
Runtime Error: 'object' does not contain a definition for 'NonExistentProperty'

dynamic vs var

বিষয়vardynamic
টাইপ ইনফারেন্সকম্পাইল টাইমরানটাইম
টাইপ পরিবর্তনসম্ভব নাসম্ভব
IntelliSenseহ্যাঁনা (রানটাইমে জানা যায়)
পারফরম্যান্সনেটিভ (নো ওভারহেড)धीম (DLR ওভারহেড)
এরর ধরার সময়কম্পাইল টাইমরানটাইম

ব্যবহারের পরিস্থিতি

  • JSON ডিসিরিয়ালাইজেশন: dynamic data = JsonConvert.DeserializeObject(json);
  • COM ইন্টারঅপ: Excel, Word অটোমেশন
  • রিফলেকশন簡易: dynamic obj = Activator.CreateInstance(type);
  • IronPython/IronRuby ইন্টারঅপ
  • Entity Framework ডাইনামিক কোয়েরি

সতর্কতা ও বেস্ট প্র্যাকটিস

  • অতিশয় ব্যবহার করবেন না — টাইপ সেফটি হারায়, রিফ্যাক্টরিং কঠিন হয়
  • পাবলিক API-তে dynamic রিটার্ন/প্যারামিটার এড়িয়ে চলুন
  • পরফরম্যান্স-ক্রিটিক্যাল পথে ব্যবহার করবেন না
  • ExpandoObject ব্যবহার করে রানটাইমে প্রপার্টি যোগ/বাদ দেওয়া যায়

ExpandoObject উদাহরণ


using System.Dynamic;

dynamic expando = new ExpandoObject();
expando.Name = "Dynamic";
expando.Age = 25;
expando.SayHello = new Action(() => Console.WriteLine($"Hi, {expando.Name}"));

expando.SayHello(); // Hi, Dynamic
  1. সি ভাষায় শিফট অপারেশন (লেফট, রাইট শিফট এবং কমপ্লিমেন্ট)

  2. ওয়াই-ফাই নেটওয়ার্কে কোন পাসওয়ার্ড ব্যবহার করা উচিত নয়?

  3. সমাধান: 'iTunes Could Not Connect to This iPhone The value is Missing' ত্রুটি

  4. আইটিউনস 'Could Not Connect to this iPhone. The Value is Missing' এরর সমাধান: ধাপে ধাপে গাইড