أمثلة في اختبار مدفوعة التنمية على سبيل المثال من قبل كينت بيك

StackOverflow https://stackoverflow.com/questions/826592

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أقرأ من خلال اختبار مدفوعة التنمية:على سبيل المثال وأحد الأمثلة هو يزعجني.في الفصل 3 (المساواة للجميع) ، الكاتب يخلق equals وظيفة في Dollar فئة لمقارنة اثنين Dollar الكائنات:

public boolean equals(Object object)
{
    Dollar dollar= (Dollar) object;
    return amount == dollar.amount;
}

ثم في الفصل التالي (4:الخصوصية) ، وقال انه يجعل كمية عضو خاص من فئة الدولار.

private int amount;

و الاختبارات تمر.لا بسبب خطأ برنامج التحويل البرمجي في equals الطريقة لأنه في حين الكائن يمكن الوصول الخاصة به amount الأعضاء كما هو مقيد من الوصول إلى الآخر Dollar الكائن amount الأعضاء ؟

//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount

أنا في الأساس سوء الفهم private?

التحديث قررت العودة و رمز جنبا إلى جنب مع الكتاب يدويا و عندما وصلت إلى الجزء التالي (الفصل 6 - المساواة بين الجميع ، مسترجع) حيث دفع المبلغ في فئة الأم وجعلها محمية أنا الحصول المشاكل:

public class Money
{
    protected int amount;
}

public class Dollar : Money
{
    public Dollar(int amount)
    {
        this.amount = amount;
    }
    // override object.Equals
    public override bool Equals(object obj)
    {
        Money dollar = (Money)obj;
        //"error CS1540: Cannot access protected member 'Money.amount'
        // via a qualifier of type 'Money'; the qualifier must be of 
        // type 'Dollar' (or derived from it)" on the next line:
        return amount == dollar.amount;
    }
}

هل هذا يعني أن protected هو المثال القائم في C# ؟

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

المحلول

نعم أنت في الأساس سوء الفهم الخاص.الخصوصية هي فئة محددة لا مثيل محددة.

نصائح أخرى

الأساس سوء الفهم خاصة الدولار يمكن الوصول إلى أي الدولار طريقة خاصة إذا كانوا من نفس الفئة.

التعديل القطاع الخاص الدرجة الخاصة, ليس كائن خاص.

في جاوة ، private يعني الدرجة الخاصة.داخل الطبقة ، يمكنك الوصول إلى هذا الميدان في جميع الحالات من فئة.

في ميلان هناك أيضا كائن نطاق خاص الذي هو مكتوب private[this].أيضا في جوانب أخرى سكالا هي نطاقات هي أكثر مرونة (انظر هذه المادة لمزيد من المعلومات).

ولكن في جافا لا يوجد كائن نطاق خاص.

في لغة C++ الأسرة (C++,Java,C#), التحكم في الوصول هو فقط على مستوى الفئة.لذلك private يسمح بالوصول إلى أي حالة من تلك الفئة.

IIRC في Smalltalk الخصوصية يتصرف كما كنت تتوقع.

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