منشئون محميين وطبقة مضطرسة / مجردة
-
23-08-2019 - |
سؤال
ما هو الفرق بين الفصل مع منشئين محميين وفئة ملحوظة 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