الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد مثال عملي لو سمحتم على استخدام الدوال الوهمية new و override

بدأه Abo.Gamal في 2 مايو 2014 · 9 رد · 863 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته


 


حياكم الله اخواني جميعاً


 


انا مبتدئ في السي شارب واريد المساعدة 


 


أريد مثال عملي لو سمحتم على استخدام الدوال الوهمية new و override  


 


ولماذا يتم عمليا استخدام هذه الدوال ..  لماذا نستخدمهم اساساً.


qUYHBy.jpg

#2

السلام عليكم ورحمة الله وبركاتة

 

أخي هل تستطيع توضيح السؤال؟

My Latest

Hello Entity Framework Code First

--------------------

#3
D a r K T o u c h كتب:

السلام عليكم ورحمة الله وبركاتة

 

أخي هل تستطيع توضيح السؤال؟

 

حياك الله اخي ..  اريد مثال يتم استخدم فيه الدوال الوهمية new و override  

qUYHBy.jpg

#4

السلام عليكم ورحمة الله وبركاتة

 

تفضل أخي هذا مثال

 

override C# Reference

 

ببساطة أخي لاحظ المثال الثاني المتعلق بكتابة كلاس Employee. سوف تلاحظ أن في الدالة CalculatePay يقوم فقط بأرجاع القيمة التي تكون في المتغير basepay. وأيضاً لاحظ أن هذه الدالة معرفة على أنها virtual. أي انها افتراضية بمعنى آخر انها تحتوي على وظيفة وهي أرجاع القيمة التي في المتغير.

 

أذاً لو قررت أستخدام كلاس Employee و أستخدام الدالة CalculatePay. سوف تعمل بالوظيفة الأفتراضية التي تحتويها.

 

تكملة المثال لاحظ أخي أنه عرف كلاس جديد يسمى SalesEmployee و جعله inherit من كلاس Employee اي أنه يورث هذا الكلاس. لكن المشكلة ان طريقة الحساب في هذا الكلاس مختلفة عن الطريقة الأفتراضية التي تمت كتابتها في كلاس Employee.

 

لذا سوف تلاحظ أنه عمل override للدالة CalculatePay, و كتب فيها طريقة الحساب التي يريدها. أي كانه أستبدل طريقة الحساب في الدالة الأساسية الموجودة في كلاس Employee  بطريقة حساب أخرى.

 

 

لربما تتسأل ما الفائدة من هذا العمل في المثال السابق, بكل بساطة أخي تخيل معي ان كلاس Employee سوف يتم وراثته من أكثر من كلاس, وكل كلاس له طريقة حساب تختلف عن الأخر. ليس من المعقول أن تتم كتابة دالة لكل طريقة حساب.

 

لكن ما فعلة هو كتابة دالة افتراضية و تكون قابلة للتعديل لكل كلاس يورث كلاس Employee.

 

 

good luck

تم تعديل هذه المشاركة بواسطة D a r K T o u c h في 3 مايو 2014 في 23:08

1

My Latest

Hello Entity Framework Code First

--------------------

#5
D a r K T o u c h كتب:

السلام عليكم ورحمة الله وبركاتة

 

تفضل أخي هذا مثال

 

override C# Reference

 

ببساطة أخي لاحظ المثال الثاني المتعلق بكتابة كلاس Employee. سوف تلاحظ أن في الدالة CalculatePay يقوم فقط بأرجاع القيمة التي تكون في المتغير basepay. وأيضاً لاحظ أن هذه الدالة معرفة على أنها virtual. أي انها افتراضية بمعنى آخر انها تحتوي على وظيفة وهي أرجاع القيمة التي في المتغير.

 

أذاً لو قررت أستخدام كلاس Employee و أستخدام الدالة CalculatePay. سوف تعمل بالوظيفة الأفتراضية التي تحتويها.

 

تكملة المثال لاحظ أخي أنه عرف كلاس جديد يسمى SalesEmployee و جعله inherit من كلاس Employee اي أنه يورث هذا الكلاس. لكن المشكلة ان طريقة الحساب في هذا الكلاس مختلفة عن الطريقة الأفتراضية التي تمت كتابتها في كلاس Employee.

 

لذا سوف تلاحظ أنه عمل override للدالة CalculatePay, و كتب فيها طريقة الحساب التي يريدها. أي كانه أستبدل طريقة الحساب في الدالة الأساسية الموجودة في كلاس Employee  بطريقة حساب أخرى.

 

 

لربما تتسأل ما الفائدة من هذا العمل في المثال السابق, بكل بساطة أخي تخيل معي ان كلاس Employee سوف يتم وراثته من أكثر من كلاس, وكل كلاس له طريقة حساب تختلف عن الأخر. ليس من المعقول أن تتم كتابة دالة لكل طريقة حساب.

 

لكن ما فعلة هو كتابة دالة افتراضية و تكون قابل للتعديل لكل كلاس يورث كلاس Employee.

 

 

good luck

بارك الله فيك اخي  وجزاك كل خير وصلت الفكرة  ولكن اشرح لي هذا السطر  بارك الله بك 

 

 

لماذا كتب 

public SalesEmployee(string name, decimal basepay,
decimal salesbonus) : base(name, basepay)

مامعنى  : base(name, basepay)   هل  يقصد بأنهم يعودوا  للفئة الأم ؟

تم تعديل هذه المشاركة بواسطة Abo.Gamal في 3 مايو 2014 في 21:43

qUYHBy.jpg

#6

هذا هو المعنى الذي  كنت ابحث  عنه  ( لربما تتسأل ما الفائدة من هذا العمل في المثال السابق, بكل بساطة أخي تخيل معي ان كلاس Employee سوف يتم وراثته من أكثر من كلاس, وكل كلاس له طريقة حساب تختلف عن الأخر. ليس من المعقول أن تتم كتابة دالة لكل طريقة حساب.

 

لكن ما فعلة هو كتابة دالة افتراضية و تكون قابل للتعديل لكل كلاس يورث كلاس Employee. )

 

بوركت

qUYHBy.jpg

#7

السلام عليكم و رحمة الله وبركاتة

 

base C# Reference

 

أخي الكلاس SalesEmployee يورث من الكلاس Employee صحيح ؟. أذاً هو الأساس(base) له.

 

و تستخدم base للأشارة الى الكلاس الاساس او بمعنى أخر الكلاس الذؤي يتم الوراثة منه.

public SalesEmployee(string name, decimal basepay, 
                  decimal salesbonus) : base(name, basepay)
        {
            this.salesbonus = salesbonus;
        }

الكود السابق يدعى constructor للكلاس SalesEmployee و يتحتوي على ثلاثة متغيرات. أي عندما نريد أستخدام هذا الكلاس نعمل هذه الطريقة:

SalesEmployee se = new SalesEmployee ("name", 100, 50);

وعندما نريد أستخدام كلاس Employee نعمل هذه الطريقة:

Employee emp = new Employee("name", 100);

لاحظ معي ان اول متغيرين في كلا الكلاسين متشابهين و لا ننسى ان الكلاس SalesEmployee يورث من كلاس Employee مما يعني ان الكلاس SalesEmployee يستطيع الوصول الى المتغيرات الموجودة في الكلاس Employee.

 

لذا بدلاً من تعريف مثل المتغيرات في الكلاس SalesEmployee تستطيع أعطائهم القيمة التي تريد بأستخدام

public SalesEmployee(string name, decimal basepay, 
                  decimal salesbonus) : base(name, basepay)
        {
            this.salesbonus = salesbonus;
        }

الخلاصة: أنك تستطيع أستخدام base للوصول الى members موجودين في في الكلاس الأب.

 

و ما تم فعلة في الكود السابق هو أستدعاء constructor للكلاس الأب و أعطائة القيم التي يحتاجها

 

اتمنى ان يكون الشرح مفهموم.

 

good luck

1

My Latest

Hello Entity Framework Code First

--------------------

#8
D a r K T o u c h كتب:

السلام عليكم و رحمة الله وبركاتة

 

base C# Reference

 

أخي الكلاس SalesEmployee يورث من الكلاس Employee صحيح ؟. أذاً هو الأساس(base) له.

 

و تستخدم base للأشارة الى الكلاس الاساس او بمعنى أخر الكلاس الذؤي يتم الوراثة منه.

public SalesEmployee(string name, decimal basepay, 
                  decimal salesbonus) : base(name, basepay)
        {
            this.salesbonus = salesbonus;
        }

الكود السابق يدعى constructor للكلاس SalesEmployee و يتحتوي على ثلاثة متغيرات. أي عندما نريد أستخدام هذا الكلاس نعمل هذه الطريقة:

SalesEmployee se = new SalesEmployee ("name", 100, 50);

وعندما نريد أستخدام كلاس Employee نعمل هذه الطريقة:

Employee emp = new Employee("name", 100);

لاحظ معي ان اول متغيرين في كلا الكلاسين متشابهين و لا ننسى ان الكلاس SalesEmployee يورث من كلاس Employee مما يعني ان الكلاس SalesEmployee يستطيع الوصول الى المتغيرات الموجودة في الكلاس Employee.

 

لذا بدلاً من تعريف مثل المتغيرات في الكلاس SalesEmployee تستطيع أعطائهم القيمة التي تريد بأستخدام

public SalesEmployee(string name, decimal basepay, 
                  decimal salesbonus) : base(name, basepay)
        {
            this.salesbonus = salesbonus;
        }

الخلاصة: أنك تستطيع أستخدام base للوصول الى members موجودين في في الكلاس الأب.

 

و ما تم فعلة في الكود السابق هو أستدعاء constructor للكلاس الأب و أعطائة القيم التي يحتاجها

 

اتمنى ان يكون الشرح مفهموم.

 

good luck

شكرا   لك  اخي  لقد  فهمت عمليها  بشكل  جيد  ..  هل تستطيع  شرح  NEW  ايضا لي  

qUYHBy.jpg

#9

لتستخدم الدالة ()EmployeeInfo الموجودة في الكلاس Employee مثلا،  يجب إنشاء كائن جديد من نفس الكلاس أي (Employee)

و لتنشئ كائن جديد، يجب أن تستخدم NEW .

Employee emp = new Employee("name", 100);

قمنا بإنشاء كائن جديد أسميناه emp ....

و لطلب الدالة  ()EmployeeInfo تكتب اسم الكائن  ثم نقطة ثم اسم الدالة مع الأقواس فارغة إن لم تحتوي على بارامترات أي :

emp.EmployeeInfo();

أتمنى أن تكون الأمور واضحة

#10
X-ThreaT كتب:

لتستخدم الدالة ()EmployeeInfo الموجودة في الكلاس Employee مثلا،  يجب إنشاء كائن جديد من نفس الكلاس أي (Employee)

و لتنشئ كائن جديد، يجب أن تستخدم NEW .

Employee emp = new Employee("name", 100);

قمنا بإنشاء كائن جديد أسميناه emp ....

و لطلب الدالة  ()EmployeeInfo تكتب اسم الكائن  ثم نقطة ثم اسم الدالة مع الأقواس فارغة إن لم تحتوي على بارامترات أي :

emp.EmployeeInfo();

أتمنى أن تكون الأمور واضحة

مشكور اخي  ولكن  لا اقصد  كلمة New   من اجل تعريف  كائن من فئة  انما اقصد  new بالوظائف المجهولة التي هي شبيهة بــ override

انظر هنا : https://www.youtube.com/watch?v=L7GKKjwmkrc

تم تعديل هذه المشاركة بواسطة Abo.Gamal في 4 مايو 2014 في 17:24

qUYHBy.jpg

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…