أمثلة في اختبار مدفوعة التنمية على سبيل المثال من قبل كينت بيك
سؤال
أنا أقرأ من خلال اختبار مدفوعة التنمية:على سبيل المثال وأحد الأمثلة هو يزعجني.في الفصل 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 الخصوصية يتصرف كما كنت تتوقع.