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

سؤال في الوراثة

مغلق
بدأه عمر أبو قعدان في 14 فبراير 2003 · 4 رد · 836 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنظر الى الكود التالي

using System;



class A

{

	public A()

	{

  Console.WriteLine("A");

	}

	public A(int foo)

	{

  Console.WriteLine("A = {0}",foo);

	}

}



class B:A

{

	public B(int foo)

	{

  Console.WriteLine("B = {0}" ,foo);

	}

}

class app

{

	public static void Main(String  []args)

	{

  B b= new B(42);

  Console.ReadLine();

	}

}

الجواب يكون كالتالي

A

B = 42

سؤالي كيف بأمكاني أن أشغل Constructer الفئة المشتقة فقط أي بدون ان يشغل ال Constructer للفئة المشتق منها؟

#2

السلام و عليكم

أخي العزيز الدي حاصل معك الآن هو التالي

أنت عندما تقدوم بإستدعاء الـ Constructor للـ Class الإبن هذا لا يؤدي إلى إستدعاء الـ Constructor للـ Class الأب

ولكن عندما تبني أنت Constructor بدون أي Parameters هذا يتم إستدعائه تلقائيا عندما تعمل Object من الـ Class أو تورث الـ Class إلى Class آخر كما في حالتك الآن

يعني بإختصار

أنت عندما تقوم بتوريث الـ Class A إلى Class B و حيث أن الـ Class A يحتوي على Constructor بدون أي Parameters سيتم تنفيد الـ Constructor طبيعي جدا لأنه لايحتو على Parameters :):)

و الحل هنا إذا كنت تريد تجنب تنفيد الـ Constructor لابد أن تمرر Parameters له حتى لا يتم تنفيده

ملاحظه

تعرف أخي لو كان المخرج حصل كما كنت أنت تريد يعني لم يتنفد الـ Constructor في الـ Class A هذا يؤدي إلى مشكله برمجيه كبيره و هي أنه

تعرف أنت لماذا يعمل الـ Constructor بدون أي Parameters لانه هذا النوع من الـ Constructor أو الإجرائات لابد و لابد و لابد ألف مره عليها أن تنفد قبل أي إستخدام للـ Method او الـ Function ..... يعني الـ Constructor بدون الـ Parameters لابد أن ينفد في أغلب الآحيان يستخدم لعمل قيم إبتدائيه للمتغيرات

و الحل كما قلتلك في السابق لابد أن تمرر Parameters له حتى لا يتم تنفيده

هذا طبعا هذا لم يكن مهم تنفيده في كل الحالات

ولكن ممكن أن تكون توفر لغة الـ #C حكم أنها لغة متطوره و فيها الكثير من الخبايا هذا الشيى يعني عدم تنفيد الـ Constructor (ولو أني لا اعتقد أهذا أبدا :rolleyes:)

وشكرا

قم بزيارة موقعنا الخاص C# Lover ... الموقع الخاص بمحبي لغة الـ #C العرب

http://arab.csharplover.com

#3

(f)

قم بزيارة موقعنا الخاص C# Lover ... الموقع الخاص بمحبي لغة الـ #C العرب

http://arab.csharplover.com

#4

في المشيد لانقوم بعمليات ادخال أو إخراج .. فالمشيدات دائما تستخدم لتهئية المتغيرات بالطرق المختلفة ..

لكن لو أردنا ان نستدعي المشيد للفئة الأساس مثلا

class ClassA : ClassB

{

     public ClassA() : base(20) //إذا فرضنا الأن الاساس يحتوي على مشيد بمتغير واحد

     {

            ..

            ..

      }

}

هذا الموضوع مغلق.

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