البرمجة

تجنب Null Reference Exception في C# عند استخدام واجهات وكائنات

عندما نلقي نظرة على الشيفرة البرمجية التي قدمتها، نجد أنك تقوم بإنشاء فئة تسمى Blah تحتوي على خصائص Whatever و WhatYouJustSaid. ثم قمت بإنشاء واجهة IBlah تعرف خاصية من نوع Blah. أخيرًا، قمت بإنشاء فئة Class1 تنفذ هذه الواجهة وتحتوي على خاصية BlahValues.

المشكلة الحالية تكمن في الطريقة التي تقوم بها بتهيئة الكائن Class1 واستخدامه. في السطور التالية:

csharp
Class1 c1 = new Class1(); c1.BlahValues.WhatYouJustSaid = "nothing"; c1.BlahValues.Whatever = false;

أنت تقوم بإنشاء كائن Class1، ولكن لم تقم بتهيئة BlahValues، لذا BlahValues ستكون بالتالي تكون null. عند محاولة الوصول إلى خصائص BlahValues.WhatYouJustSaid و BlahValues.Whatever، ستحدث استثناء القيمة الفارغة (Null Reference Exception).

لتجنب هذا، يجب عليك تهيئة BlahValues قبل استخدامها. يمكنك فعل ذلك على سبيل المثال كما يلي:

csharp
Class1 c1 = new Class1(); c1.BlahValues = new Blah(); // تهيئة BlahValues c1.BlahValues.WhatYouJustSaid = "nothing"; c1.BlahValues.Whatever = false;

بهذه الطريقة، ستتجنب استثناء القيمة الفارغة، حيث تقوم بتهيئة BlahValues بكائن من النوع Blah قبل الوصول إلى خصائصه.

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

عندما نتحدث عن استثناء القيمة الفارغة (Null Reference Exception)، يجب علينا فهم بعض المفاهيم الأساسية في لغة البرمجة C# وكيفية التعامل مع الكائنات والواجهات.

أولاً وقبل كل شيء، يجب أن نعلم أنه في C#، عندما تقوم بإنشاء كائن من نوع الفئة، فإن جميع الخصائص (المتغيرات) تكون بالقيمة الافتراضية لنوع البيانات المحددة. في حالتنا هنا، عندما أنشأت Class1، فإن خاصية BlahValues (التي هي من نوع Blah) ستكون بالقيمة الافتراضية لنوع Blah، والتي هي null لأن Blah هي مرجع (Reference Type).

لحل المشكلة وتجنب Null Reference Exception، يفضل تهيئة BlahValues عند إنشاء الكائن من Class1. يمكنك أيضًا القيام بذلك في بناء Class1 نفسه، على سبيل المثال:

csharp
public class Class1 : IBlah { public Class1() { BlahValues = new Blah(); // تهيئة BlahValues عند إنشاء الكائن } public Blah BlahValues { get; set; } }

بهذه الطريقة، عندما تقوم بإنشاء كائن من Class1، ستكون BlahValues مهيأة تلقائيًا ولن تكون قيمتها null، مما يحميك من استثناء القيمة الفارغة عند الوصول إلى خصائصها.

مقالات ذات صلة

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!