في البداية، يجب أن نفهم أن السبب وراء الحصول على إخراج فضاء الأسماء والكائن (namespace.object) عند طباعة قيمة من القاموس في لغة البرمجة C# يعود إلى النموذج الافتراضي للطباعة لكائنات. عندما تقوم بطباعة كائن، يتم استخدام الأسلوب ToString()
لتحويل الكائن إلى سلسلة نصية للعرض. إذا لم يتم تجاوز أسلوب ToString()
في الكائن، سيتم استخدام الإصدار الافتراضي الذي يعود بفضاء الأسماء واسم الكائن.
في المثال الذي قدمته، يظهر أن الكائن elementDO
لا يحتوي على تجاوز لأسلوب ToString()
، لذا يتم استخدام الإصدار الافتراضي. لتحقيق السلوك المرغوب عند الطباعة، يجب تجاوز أسلوب ToString()
في الكائن elementDO
ليعيد النص الذي تريد رؤيته عند الطباعة.
للقيام بذلك، يمكنك إضافة تجاوز لأسلوب ToString()
في الكائن elementDO
بالشكل التالي:
csharpnamespace MoleCalculator
{
public class elementDO
{
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public decimal AtomicWeight { get; set; }
public override string ToString()
{
return $"{Name} ({Symbol}) - Atomic Number: {AtomicNumber}, Atomic Weight: {AtomicWeight}";
}
}
}
بهذا التجاوز، ستحصل على إخراج يحتوي على المعلومات التي ترغب في رؤيتها عند الطباعة. عند تشغيل الكود الخاص بك بعد هذا التعديل، ستحصل على إخراج يشبه الناتج التالي:
sqlHydrogen (H) - Atomic Number: 1, Atomic Weight: 1.007825
هذا الناتج سيكون أكثر تفصيلاً وملاءمة لاحتياجات الطباعة التي ترغب في تحقيقها.
المزيد من المعلومات
بالطبع، دعونا نوسع على الحل السابق ونتحدث عن بعض المفاهيم الأساسية في لغة البرمجة C# وكيف يمكن تحسين الكود لجعله أكثر فهمًا وفعالية.
أولاً وقبل كل شيء، يجب أن نتعرف على مفهوم التجاوز (Override) في C#. عندما نقوم بتجاوز أسلوب، نقوم بتوفير نسخة جديدة من هذا الأسلوب في الفئة المشتقة، وهذا يسمح لنا بتعديل سلوك الأسلوب بما يتناسب مع احتياجات الفئة المشتقة.
في المثال السابق، استخدمنا تجاوز لأسلوب ToString()
لنحسن الإخراج عند الطباعة. لكن هناك مزيد من الأمور التي يمكن تحسينها.
-
استخدام StringBuilder:
في حالة تكوين سلسلة نصية طويلة أو معقدة، يفضل استخدامStringBuilder
بدلاً من الاتصال المتكرر لعمليات الإضافة. هذا يساعد على تحسين أداء البرنامج.csharppublic override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append($"{Name} ({Symbol}) - Atomic Number: {AtomicNumber}, Atomic Weight: {AtomicWeight}"); return sb.ToString(); }
-
التعامل مع قيم
null
:
يمكنك تحسين الكود ليتعامل بشكل أفضل مع حالة عدم وجود قيمة (null)، مما يزيد من مرونة البرنامج. يمكنك تحقيق ذلك عن طريق التحقق من القيم المحتملة قبل الطباعة.csharppublic override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append($"{Name ?? "Unknown"} ({Symbol ?? "N/A"}) - Atomic Number: {AtomicNumber}, Atomic Weight: {AtomicWeight}"); return sb.ToString(); }
-
استخدام محرر النصوص الوسيطة (Interpolated Strings):
في C# 6.0 فما فوق، يمكنك استخدام تعبيرات التركيب لتبسيط السلسلة النصية.csharppublic override string ToString() { return $"{Name ?? "Unknown"} ({Symbol ?? "N/A"}) - Atomic Number: {AtomicNumber}, Atomic Weight: {AtomicWeight}"; }
بهذه التحسينات، يمكنك تحسين قابلية قراءة وأداء الكود الخاص بك، مما يساعد على فهم البرنامج وصيانته بشكل أفضل.