سؤال

ممكن مكررة:
الخصائص مقابل طرق

بالنسبة للعديد من المواقف، من الواضح ما إذا كان هناك شيء ما يجب أن يكون عقارا أو طريقة ولكن هناك عناصر قد تعتبر غامضة.

خصائص واضحة:

  • "اسم"
  • "الطول"

طرق واضحة:

  • "sendmessage"
  • "مطبعة"

غامض:

  • "صالح" / "ISVALD" / "التحقق من صحة"
  • "تدخل" / "isinbounds" / "الشيكات"
  • "AverageChildValue" / "CalcaveragechildValue"
  • "الألوان" / "setcolorsaturation"

أفترض أنني سأكشف نحو طرق غامضة، لكن هل يعرف أحد عن قاعدة أو اتفاقية تساعد في اتخاذ قرار بشأن هذا؟ على سبيل المثال يجب أن تكون جميع الخصائص O (1)؟ إذا لم تتمكن العقار من تغيير البيانات الأخرى (قد تتغير الألوان، G، B القيم)؟ يجب أن لا تكون ممتلكات إذا كان هناك حساب أو تجميع؟

فقط من منظور أكاديمي، (وليس لأنني أعتقد أن هذه فكرة جيدة) هل هناك سبب لعدم المجنونة مع العقارات والكل ما يعد استجواب للفئة دون اتخاذ حجة، وكل ما يمكن تغييره عنه الفصل مع حجة واحدة ولا يمكن أن تفشل، خاصية؟

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

المحلول

أنا عادة تحويل خاصية إلى وظيفة إذا كان لديها واحدة من السلوكيات التالية

  • يؤدي تأثير جانبي (بخلاف تحديد حقل الدعم)
  • التنفيذ مكلف بالمقارنة مع القول الوصول الميداني
  • التنفيذ لديه تعقيد أعلى من السجل (ن)
  • يمكن رمي استثناء

نصائح أخرى

لقد وجدت بعض النص مثير للاهتمام حول هذا الموضوع

MSDN |. الخصائص مقابل طرق

تعديل

تقول أشياء مثل:

استخدام خاصية عندما

  • العضو عضو في بيانات منطقية

استخدام طريقة عندما

  • العملية عبارة عن تحويل، مثل الكائن .tosting.
  • العملية باهظة الثمن بما فيه الكفاية التي تريد التواصل معها للمستخدم الذي يجب أن يفكر فيه التخزين المؤقت للنتيجة.
  • الحصول على قيمة خاصية باستخدام Get Accessor سيكون لها تأثير جانبي ملحوظ.
  • إن استدعاء العضو مرتين في الخلافة ينتج نتائج مختلفة.
  • أمر التنفيذ مهم. لاحظ أن خصائص النوع يجب أن تكون قادرة على تعيينها واسترجاعها بأي ترتيب.
  • العضو ثابت ولكنه إرجاع قيمة يمكن تغييرها.
  • يعود العضو صفيف. الخصائص التي يمكن أن تكون صفائف العودة مضللة للغاية.
  • عادة ما يكون من الضروري إرجاع نسخة من الصفيف الداخلي بحيث لا يمكن للمستخدم تغيير الحالة الداخلية. هذا، إلى جانب حقيقة أن المستخدم يمكن أن يفترض بسهولة أنه خاصية مفهرسة، يؤدي إلى رمز غير فعال.

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

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

إذا كنت تستطيع حساب شيء ما لديك بالفعل، استخدم الأساليب، إذا كان يجب أن تكون قيمتك أساسا للعمل مع أو حساب شيء آخر، فيجب أن تكون ممتلكات.

على سبيل المثال، إذا كنت ترغب في التحقق مما إذا كان إدخال مستخدم معين محدثا ويمكنك القيام بذلك باستخدام خوارزمية فريدة من نوعها، استخدم الطريقة Validate(). وبعد إذا أرسل لك المستخدم فقط نموذج تقديم عنوان NIS هو صالح، استخدم الممتلكات valid. وبعد لكنه مجرد نهج مشترك قد يختلف اعتمادا على ما تريد فعلا.

أنا شخصيا اتخذ الاختيار على التعقيد وماذا ستفعل الطريقة / الممتلكات. إذا كنت أفعل جميعا هو تحديد قيمة، أي اسم = شيء؛، ثم أذهب مع خاصية. حتى لو كنت سأقوم ببعض الحسابات الأساسية للغاية أو البيانات الشرطية، سألتزم بممتلكات. ولكن إذا كان هناك حاجة إلى شيء ما في العمل الجاد أو حتى العمل المعتدل الذي كنت أستخدمه طريقة. لا شيء agzrevates لي المزيد ثم وضع خاصية وفجأة مزيد بمزيد من الكود أكثر مما كنت أتوقع أن يتم تنفيذها.

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