مسألة الوراثة (نوع المعلمات مقابل البنائون)

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

  •  03-07-2019
  •  | 
  •  

سؤال

إذا كان لديك فئة مجموعة مخصصة الذي يخزن أوزان فئة واحدة من الفواكه بشكل فردي في يطفو / مزدوجة، كما يلي:

1.1, 3.3, 6.6, 4.4, ...

وكنت في حاجة لتحديد ما اذا كان تعويم أو مزدوج والتفريق بين نوع الفاكهة، هل هو أفضل للقيام بذلك من هذا القبيل:

وباستخدام التعداد:

FruitList<float, FruitType.Orange>

أو

وباستخدام التعداد في المنشئ:

FruitList<float> (FruitType.Orange)

أو

<ع> استخدام فئة:

FruitList<float, Orange>

أو

<ع> استخدام فئة في المنشئ:

FruitList<float> (Orange)

والشيء الشيء الذي يخلط لي هو ما إذا كان تحديد هذا النوع من الاشياء المنطقي في منطقة <> (لا أعرف ما يسمى تلك المنطقة)؟

ما هي وأسرع وأكثر كفاءة ممارسة أفضل؟

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

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

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

المحلول

وأولا وقبل كل شيء، القيم التعداد ليست أنواع، وبالتالي فإن المثال

FruitList<float, FruitType.Orange>

ولن ينجح. إذا كنت ترغب في التأكد من أن قائمة عامة بك يتم كتابتها staticly إلى Orange سيكون لديك لاستخدام هذه واحدة

FruitList<float, Orange>

وعلى الرغم من أنك لن تستخدم أبدا الطبقة Orange. كما أراه، هناك ربما لا حاجة، حيث يمكنك نقل اكتب في اسم المتغير:

FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);

نصائح أخرى

وFruitList<float>(FruitType.Orange) ربما هو الطريق للذهاب.

وfloat لا يمكن أن يكون أي شيء ما عدا المعلمة نوع. نوع الفاكهة هو مجرد الممتلكات. فإنه لا معنى لخلق نوع منفصل واستخدام معلمات نوع لذلك.

ويعتمد إذا كان هذا أورانج لك هو مجرد الذهاب أن يكون مثل ... العلامة ... مثل اللون. سيارة يمكن أن يكون الأزرق والأحمر ويكون لا يزال "نفس" سيارة. إذا كنت ترغب في أورانج لتكون قادرة على القيام بشيء خاص، شيء مختلف عن ثمرة عادي، أو تفاحة، وأنا إنشاء فئة الفاكهة مجردة وعلى مستوى فرعية البرتقال، ثم استخدام شيء <>. لو كان مجرد العلامة الشيء، مثل اللون، ثم على التعداد يمكن أن تفعل ما يرام اعتقد.

وأود أن أعتقد أنه من الأسهل أن يكون نوع التحقق وهذا باستخدام الفئات / البنيات بالرغم من ذلك. مثل، ما من شأنه أن يحدث إذا حاول أحدهم لإضافة بعض الفاكهة من نوع التفاح إلى أن fruitlist لك؟ سوف تصبح برتقالة؟ كان يمكن أن يكون للتحقق مما إذا كان نوع ثمرة فاكهة البرتقال؟ ماذا سيحدث اذا لم يكن؟ argumentexception؟

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

class FruitList<TFruit> where TFruit : Fruit {}

abstract class Fruit {public abstract decimal Weight {get; protected set; }}

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