سؤال

كما في العنوان.لماذا كومة هل تحتاج الفئة إلى طريقة لإرجاع مرجع للكائن العلوي؟لقد قيل لي دائمًا أن الأساليب تشير إلى وجود بعض الحوسبة المعنية وأنه يجب إرجاع الكائنات البسيطة مع خصائصها بدلاً من ذلك. Peek() لا تحتوي الطريقة على معلمات وعلى مستوى الكود فهي (على ما أعتقد) عملية بسيطة.

السؤال هو:هل هناك سبب محدد لذلك؟أي سلوك خفي يؤثر على الأداء؟

يحرر: لا أعرف طريقة تنفيذ الفصل الدراسي، لكن f.e.إذا كانت الطريقة تستخدم العداد بالأسفل، فسيكون التكرار إلى العنصر الأخير عدة مرات أمرًا غير حكيم.ومن ناحية أخرى إذا كان واحدا IList, ، فلا ينبغي أن يكون لها أي تأثير أكبر على الأداء.

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

المحلول

نظرة خاطفة هو الفعل، وذلك في كتابي Peek() يجب يكون وسيلة.ولكن باسم مختلف يمكن أيضًا أن تكون ملكية.

تذكر أن أي خاصية مرتبطة بطرق get و/أو set، لذا سينتهي بك الأمر بطريقة في كلتا الحالتين.

نصائح أخرى

أفهم السؤال على أنه "لماذا هي طريقة وليست خاصية".

يمكن أن يكون الاتساق أحد الأسباب - فكل طرق الوصول هي في الواقع طرق.إنها مسألة أسلوب تمامًا، لأنني لا أرى أي سبب لعدم امتلاكها كخاصية، من منظور الكود البحت.

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

أود أن أقول أن القيمة ليست خاصية لـ Stack في حد ذاته، ولكن نتيجة لتقييم المحتوى الحالي للمكدس، في رأيي، الطريقة أكثر ملاءمة من الخاصية.

وكما ج.يذكر إيفينهويس في إجابته, نظرة خاطفة هو الفعل, لذا فإن الطريقة أكثر منطقية.وبما أن النظرة الخاطفة هي المصطلح الشائع لهذه العمليات على الأكوام، فمن المنطقي استخدام ذلك ثم استخدام مصطلح جديد/مختلف فقط لاستخدام خاصية.

أوافق، يمكن أن يكون خاصية TopItem أو شيء من هذا القبيل لأن هذا منطقي بشكل مبدئي، ولكن هل سيؤدي إلى استثناء أو إرجاع فارغ إذا كان فارغًا؟يجب ألا تطرح الخصائص استثناءات، وفقا لMSDN.

من مرجع مصدر المكدس, ، سترى التعليمات البرمجية المتضمنة لطرح استثناء محدد.

    // Returns the top object on the stack without removing it.  If the stack
    // is empty, Peek throws an InvalidOperationException.
    public virtual Object Peek() {
        if (_size==0)
            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EmptyStack"));
        Contract.EndContractBlock();
        return _array[_size-1];
    }

وهذا يختلف الآن عن كيفية التعامل مع مفهوم الخاصية المذكور أعلاه.لذلك واحد مقابل الآخر.

تحرير - تمت إضافة وثائق الملكية.وليس الإجابة الفائزة، ولكن تقديم مزيد من التوضيح حول المنطق وراء كونها ليست خاصية.

هذا هو التغليف، والغرض منه هو تقييد الوصول إلى مكونات الكائنات: http://en.wikipedia.org/wiki/Encapsulation_(object-Oriented_programming)

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