ميرا محمد نشر 4 ديسمبر 2017 أرسل تقرير نشر 4 ديسمبر 2017 ممكن لو سمحتو اريد شرح لدالة equal و دالة Get type في لغة سي شارب مع الاكواد اقتباس
2 طارق جهاد نشر 4 ديسمبر 2017 أرسل تقرير نشر 4 ديسمبر 2017 (معدل) Equal مقارنة نوعين من البيانات مع بعضهما، وترجع true في حال تساوت القيم. مثال: class Program { static void Main(string[] args) { int x = 5; int y = 5; bool isEqual = x.Equals(y); Console.WriteLine(isEqual); } } بالطبع النتيجة ستكون True. لان قيمة x تساوي قيمة y. لكن لو فرضنا نوع بيانات معقد مثل Student Class (اي ليس int, double, string, ...)، وأردنا التحقق من المساواة كما في المثال التالي: using System; namespace School { class Student { public string ID { get; set; } public string Name { get; set; } } class Program { static void Main(string[] args) { Student student1 = new Student(); student1.ID = "2007"; student1.Name = "Ahmad"; Student student2 = new Student(); student2.ID = "2007"; student2.Name = "Ahmad"; bool isEqual = student1.Equals(student2); Console.WriteLine(isEqual); } } } عند التشغيل نلاحظ أن النتيجة False، رغم ان بيانات الطالب الأول هي نفسها بيانات الطالب الثاني! الإجابة طبعا تكمن بأن المقارنة لا تتم على قيم البيانات (الإسم والرقم) وإنما على مؤشر هذا الطالب في الذاكرة (Pointer Reference in Stack Memory)، ولكي نغير من هذا السلوك الافتراضي، يجب علينا تغيير سلوك الدالة Equal التابعة للنوع Student، كما يلي: class Student { public string ID { get; set; } public string Name { get; set; } public override bool Equals(object obj) { Student student2 = (Student)obj; return (this.ID == student2.ID) && (this.Name == student2.Name); } public override int GetHashCode() { return base.GetHashCode(); } } الأن اصبحت عملية التحقق من المساواة تتم على مستوى القيم. بالتالي النتيجة True. GetType في المثال السابق قمنا بإنشاء نوع بيانات جديد هو Student، وكان اسم مشروعنا School، كما هو واضح من namespace، لذلك فإن الإسم الكامل لهذا النوع هو School.Student الأن لو فرضنا لدي مشروع أخر، وليكن اسمه University، ويوجد نوع بيانات اسمه Student ايضا ضمن هذا المشروع، ولكن يحوي على بيانات مختلفة، كما يلي: using System; namespace University { class Student { public string ID { get; set; } public string Name { get; set; } public string Faculty { get; set; } public double GPA { get; set; } public string PhoneNumber { get; set; } } } الآن كيف يتم تمييز Student التابع ل School عن Student التابع ل University: الإجابة هي بالإسم الكامل للنوع: School.Student student1 = new School.Student(); University.Student student2 = new University.Student(); بالتالي هناك حالات معينة أكون بحاجة معرفة نوع البيانات المستخدم، على سبيل المثال: class Program { static void Main(string[] args) { Student student = new Student(); if(student.GetType() == typeof(School.Student)) Console.WriteLine("This is a high school student"); else if(student.GetType() == typeof(University.Student)) Console.WriteLine("This is a university student"); else Console.WriteLine("Unknown student!"); } } الامر ينطبق حتى لو كان School.Student يطابق بالشكل تماما ل University.Student، اي يبقى كل منهما مختلف عن الآخر. بالتوفيق،،، تم التعديل في 4 ديسمبر 2017 بواسطة طارق جهاد اقتباس
السؤال
ميرا محمد
ممكن لو سمحتو اريد شرح لدالة equal و دالة Get type في لغة سي شارب مع الاكواد
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.