سؤال

لماذا يطبع البرنامج التالي

B
B

و(كما يجب)

public class A
    {
        public void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public new void Print()
        {
            Console.WriteLine("B");
        }

        public void Print2()
        {
            Print();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var b = new B();
            b.Print();
            b.Print2();
        }
    }

ولكن إذا أردنا إزالة الكلمة "الجمهور" في فئة B مثل ذلك:

    new void Print()
    {
        Console.WriteLine("B");
    }

ويبدأ طباعة

A
B

هل كانت مفيدة؟

المحلول

وعند إزالة معدل وصول public، يمكنك إزالة أي القدرة على استدعاء الأسلوب new Print() B من وظيفة Main لأنه الآن افتراضات إلى private. انها لم تعد في متناول الرئيسية.

والخيار الوحيد المتبقي هو أن يسقط إلى الخلف إلى طريقة الموروثة من A، لأن ذلك هو تنفيذ للوصول الوحيد. لو كنت لاستدعاء الطباعة () من ضمن أسلوب B آخر ستحصل تنفيذ B، لأن أعضاء B ستشهد تنفيذ الخاص.

نصائح أخرى

أنت جعل Print طريقة private، وبالتالي فإن طريقة Print الوحيد المتاح هو موروث واحد.

وخارجيا، وB.Print الجديدة () - طريقة غير مرئي بعد الآن، لذلك يطلق A.Print ()

.

وضمن الطبقة، على الرغم من B.Print-طريقة جديدة لا تزال واضحة، لذلك هذا هو واحد التي يتم استدعاؤها بواسطة أساليب في نفس الفئة.

وعند إزالة الجمهور الكلمة من الدرجة ب، هو طريقة الطباعة الجديد لم يعد متاحا خارج الصف، وذلك عند القيام b.print من البرنامج الرئيسي الخاص بك، فإنه في الواقع يجعل استدعاء الأسلوب العام المتاحة في A (لب يرث ولا يزال لديه طباعة كما الجمهور)

وبدون الكلمة العامة ثم الخاصة، وبالتالي لا يمكن أن تسمى الطريقة التي كتبها الرئيسية ().

وعلى أية حال Print2 () الأسلوب يمكن أن يطلق عليه لأنها يمكن أن نرى أساليب أخرى من فئتها الخاصة، حتى لو الخاص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top