Avatar ·

فحص الأنواع في C#: typeof، GetType() أم is؟ متى نستخدم ماذا؟

مرحبًا بالجميع! أنا مطور C# مبتدئ ولا أستطيع فهم فحص الأنواع في C#. هناك ثلاث طرق: العامل `typeof`، الأسلوب `GetType()`، والعامل `is`. لكن متى نستخدم أيًا منها؟ إليك مثال يربكني: ```csharp object obj = "Hello, world!"; // الطريقة 1 if (obj.GetType() == typeof(string)) Console.WriteLine("هذه سلسلة نصية (GetType)"); // الطريقة 2 if (obj is string) Console.WriteLine("هذه سلسلة نصية (is)"); // الطريقة 3 Type t = typeof(string); if (obj.GetType() == t) Console.WriteLine("هذه سلسلة نصية (typeof)"); ``` جميع الخيارات الثلاثة تعمل، لكني أشعر أنها ليست قابلة للتبادل. على سبيل المثال، سمعت أن `typeof` يعمل فقط مع الأنواع في وقت الترجمة (compile time)، بينما `GetType()` يعمل في وقت التشغيل (runtime). أما `is` فهو سحري نوعًا ما - يبدو أنه يتحقق من النوع ويقوم بالتحويل (casting) في نفس الوقت. أرجو التوضيح: 1. ما الفرق الجوهري بين `typeof` و `GetType()` و `is`؟ 2. متى نستخدم أيًا منها ليكون الكود صحيحًا؟