البرمجة

تقنية فحص نوع الكائن في لغة C#

في الكود الذي قدمته، يتم استخدام دالة تسمى Suit لاسترجاع كائنات من نوع Suit من داخل مصفوفة allStock التي تحتوي على كائنات من النوع Stock. ومع ذلك، يبدو أن هناك خطأ في الكود الذي قدمته، حيث يتم التحقق من نوع Stock باستخدام العبارة if (stock is Suit)، وهذا قد يؤدي إلى ظهور خطأ.

عند استخدام is للتحقق من نوع كائن، يتم التحقق من ما إذا كان الكائن هو تمامًا من نوع الفئة المحددة أو أي فئة ترث من تلك الفئة. في هذه الحالة، إذا كان stock هو من نوع Stock بشكل دقيق، فإن التحقق stock is Suit سيكون دائمًا غير صحيح.

لحل هذا الخطأ، يمكنك استخدام العبارة if (stock.GetType() == typeof(Suit)) بدلاً من if (stock is Suit) للتحقق بدقة من نوع الكائن. ستقوم هذه العبارة بمقارنة نوع الكائن بشكل مباشر مع نوع الفئة المحددة. يمكنك تحديث الكود كما يلي:

csharp
//Picking Suit out of the Stock public System.Collections.ArrayList Suit() { System.Collections.ArrayList array = new System.Collections.ArrayList(); //looping through Persons array foreach (Stock stock in allStock)//using code snippets { if (stock.GetType() == typeof(Suit)) //if it is a Suit, add it to the array list { array.Add(stock); } } return array; }

بهذا التعديل، يجب أن تتمكن الآن من استرجاع كائنات من نوع Suit بشكل صحيح دون وجود أخطاء في التحقق من النوع.

المزيد من المعلومات

لفهم السياق بشكل أوسع، يمكننا التعمق في مفهوم البرمجة بلغة C# واستخدام تقنية التحقق من نوع الكائن (Type Checking).

في لغة البرمجة C#، يتم استخدام is للتحقق من نوع الكائن، وهو يُستخدم عادة عند الحاجة إلى التحقق مما إذا كانت الفئة المحددة تمثل نوعًا معينًا أو فئة مشتقة منه. ومن الجدير بالذكر أن is يُستخدم في سياقات أخرى، مثل التحقق من توافق النوع (Type Compatibility)، حيث يُسمح للمبرمج بالتحقق من قابلية تحويل الكائن إلى نوع آخر.

في الكود الخاص بك، يُفترض أن Stock هي فئة أساسية، بينما Suit هي فئة فرعية ترث من Stock. ولكن الكود الذي قدمته يُحاول التحقق من نوع الكائن باستخدام is، وهذا قد يكون السبب في ظهور خطأ.

باستخدام GetType() بدلاً من is، يتم الآن فحص النوع بدقة دون مراعاة التوريث، وهذا يمكن أن يكون مفيدًا في حالة تحتاج فيها إلى التحقق من النوع بشكل دقيق.

يمكنك أيضًا النظر في استخدام as للتحقق من نوع الكائن وفي نفس الوقت إجراء تحويل آمن إذا كان الكائن من النوع المُحدد.

csharp
//Picking Suit out of the Stock public System.Collections.ArrayList Suit() { System.Collections.ArrayList array = new System.Collections.ArrayList(); //looping through Persons array foreach (Stock stock in allStock)//using code snippets { Suit suit = stock as Suit; if (suit != null) //if it is a Suit, add it to the array list { array.Add(suit); } } return array; }

هذا الكود يقوم بتحويل الكائن إلى نوع Suit باستخدام as ويتحقق في نفس الوقت مما إذا كان التحويل ناجحًا أم لا باستخدام الشرط suit != null.

زر الذهاب إلى الأعلى