একটি গুরুত্বপূর্ণ এবং সূক্ষ্ম ইস্যু রয়েছে যেগুলির কেউই সরাসরি সম্বোধন করে না। সি # তে টাইপ বিবেচনা করার দুটি উপায় রয়েছে: স্ট্যাটিক টাইপ এবং রান-টাইম টাইপ ।
স্ট্যাটিক টাইপ হ'ল আপনার সোর্স কোডে ভেরিয়েবলের প্রকার। সুতরাং এটি একটি সংকলন-সময় ধারণা। আপনি যখন আপনার বিকাশের পরিবেশে কোনও পরিবর্তনশীল বা সম্পত্তির উপরে ঘুরে দেখেন তখন এটি এমনই একটি সরঞ্জাম যা আপনি সরঞ্জামদণ্ডে দেখেন।
টাইপ অনুমানটি এটির যত্ন নেওয়ার জন্য আপনি সহায়ক জেনেরিক পদ্ধতি লিখে স্ট্যাটিক প্রকারটি অর্জন করতে পারেন:
Type GetStaticType<T>(T x) { return typeof(T); }
রান-টাইম টাইপ হ'ল মেমোরিতে কোনও অবজেক্টের ধরণ। সুতরাং এটি একটি রান-টাইম ধারণা। এই GetType()পদ্ধতি দ্বারা ফিরে আসা টাইপ ।
কোনও অবজেক্টের রান-টাইম প্রকারটি স্থির ধরণের পরিবর্তনশীল, সম্পত্তি, বা যে পদ্ধতিটি ধরে রাখে বা ফিরিয়ে দেয় তার স্থির ধরণের থেকে প্রায়শই আলাদা। উদাহরণস্বরূপ, আপনার এই জাতীয় কোড থাকতে পারে:
object o = "Some string";
ভেরিয়েবলের স্ট্যাটিক টাইপ object, তবে রান টাইমে ভেরিয়েবলের রিফারেন্টের ধরণ হয় string। সুতরাং, পরবর্তী লাইনটি কনসোলে "System.String" মুদ্রণ করবে:
Console.WriteLine(o.GetType());
তবে, আপনি যদি oআপনার বিকাশের পরিবেশে চলকটির উপরে ঘুরে দেখেন তবে আপনি প্রকারটি System.Object(বা সমমানের objectকীওয়ার্ড) দেখতে পাবেন । উপর থেকে আমাদের সহায়ক ফাংশনটি ব্যবহার করে আপনি এটিও দেখতে পান:
Console.WriteLine(GetStaticType(o));
যেমন মান-টাইপ ভেরিয়েবল জন্য int, double, System.Guid, আপনি কি জানেন যে run সময় টাইপ সবসময় স্ট্যাটিক টাইপ একই হবে যেমন কারণ মান ধরনের আরেক ধরনের জন্য বেস শ্রেণী হিসেবে পরিবেশন করা যাবে না; মান প্রকারটি তার উত্তরাধিকার শৃঙ্খলে সর্বাধিক উত্স প্রাপ্ত গ্যারান্টিযুক্ত। এটি সিলযুক্ত রেফারেন্স ধরণের ক্ষেত্রেও সত্য: যদি স্ট্যাটিক প্রকারটি সিলযুক্ত রেফারেন্স টাইপ হয় তবে রান-টাইম মানটি অবশ্যই সেই ধরণের উদাহরণ হতে পারে বা null।
বিপরীতে, যদি স্থির ধরণের ধরণের পরিবর্তনটি একটি বিমূর্ত প্রকার হয়, তবে এটির গ্যারান্টি দেওয়া হয় যে স্ট্যাটিক ধরণ এবং রানটাইম টাইপ আলাদা হবে।
কোডে এটি চিত্রিত করার জন্য:
int i = 0;
Console.WriteLine(i.GetType() == typeof(int));
string s = "Foo";
Console.WriteLine(s == null || s.GetType() == typeof(string));
object o = new FileInfo("C:\\f.txt");
Console.WriteLine(o == null || o.GetType() == typeof(object));
FileSystemInfo fsi = new DirectoryInfo("C:\\");
Console.WriteLine(fsi == null || fsi.GetType() == typeof(FileSystemInfo));
int