سؤال

ما هو الفرق بين الفصل مع منشئين محميين وفئة ملحوظة MustInheritب (أنا برمجة في vb.net ولكن ربما ينطبق على الأرجح على C #).

السبب في أنني أسأله هو أن لدي فئة مجردة أريد تحويل المنشئين إلى الأساليب المشتركة / الثابتة. (لإضافة بعض القيود).

لا أستطيع أن أفعل ذلك لأنه ليس من الممكن إنشاء مثيل في الوظيفة المشتركة.

أنا أفكر في مجرد إزالة MustInherit الكلمة الرئيسية. هل سيحقق هذا أي فرق؟

شكرا.

إيتا:

أعتقد أنني أجبت على سؤالي، إذا قمت بإزالة الكلمة الأساسية المستنعين، لم أعد أستطيع تضمين MUSTOVERRIDS، وهي مفيدة للغاية.

مع وضع ذلك في الاعتبار، هل هناك أي طريقة حول مشكلتي؟

ETA2:

لتوضيح، لا أستطيع أن أفعل أدناه ما لم أزيل الكلمة الأساسية؟

Public MustInherit MyBaseClass

  Private Sub New() 
  End Sub 

  Protected Function CreateInstance(ParmList) As MyBaseClass
    If ParmList is Ok Then Return New MyBaseClass()
  End Function 

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

المحلول

يمكنك الاتصال Protected منشئ باستخدام التفكير وفكرات الفكرية ولكن لا يمكنك إنشاء مثيل abstract فئة بهذه الطريقة. يمكنك أن تعلن MustOverride طرق في MustInherit الطبقات ولكن Protected المنشئ يمكن أن يفرض شيئا على الفصول المشتقة.

يجب أن تعلن دائما الطبقات التي هي مجردة من الناحية النظرية MustInherit. Protected يمكن أن يكون المنشئون مفيدا عندما تزوده مع بعض Public الزائدة لتوفير بعض الوظائف أكثر للفئات المشتقة.

نصائح أخرى

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

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

ليس متأكدا حقا ما تريد.

إذا كنت بحاجة إلى إنشاء كائن من فئة مجردة، أوصي بإنشاء تطبيق فئة خاصة من فئة مجردة وإرجاعه في Createinstancemethod:

Public MustInherit MyBaseClass
    Private BaseClassImplementation
        Inherits MyBaseClass

        ...
    End Class

    Public Function CreateInstance(paramList) as MyBaseClass
        If paramList Is Ok Then Return New BaseClassImplementation
    End Function
End Class

ومع ذلك، إذا كنت ترغب في إضافة بعض القيود إلى البناء، أوصي بإلقاء الاستثناءات:

Public MustInherit MyBaseClass
    Protected Sub New(paramList)
        If paramList IsNot Ok Then Thow New Exception
        ...
    End Sub
End Class
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top