سؤال
لقد حاولت إنشاء فئة نصوص برمجية vb بثابت وحصلت على خطأ 800A03EA.هل هو خطأ VBS؟أليست هذه قاعدة أساسية لـ OOP؟
Class customer
' comment it const and its works
const MAX_LEN=70
Private Name
Private Sub Class_Initialize
Name = ""
End Sub
' name property.
Public Property Get getName
getName = Name
End Property
Public Property Let letName(p_name)
Name = p_name
End Property
end class
المحلول
ال توثيق يسرد جميع العبارات المسموح بها في سياق الفئات. Const
ليس من بينها، لذلك فهو غير مدعوم.يمكنك حل هذه المشكلة باستخدام متغيرات الأعضاء الخاصة التي تقوم بتهيئتها أثناء إنشاء مثيل (أي.في Class_Initialize
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
إذا كان من المفترض أن تعرض مثيلات الفئة هذه القيمة، فيمكنك تنفيذها كخاصية للقراءة فقط:
Class customer
Private MAX_LEN
Private Sub Class_Initialize
MAX_LEN = 70
End Sub
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = MAX_LEN
End Property
...
End Class
ولكن كما إيكهارد هورنر تمت الإشارة إليه بشكل صحيح، فلا يزال من الممكن تغيير القيمة عن طريق التعليمات البرمجية الداخلية للكائن.إذا كانت الثبات هو المطلب الأساسي لهذه القيمة، فيجب عليك تنفيذها كثابت عالمي.
نصائح أخرى
أنا أتفق مع ansgar wiermers إجابة ، ولكن أود أن أقترح خيارا آخر.
إذا كان التحمل أكثر أهمية من الأداء، فيمكنك وضع القيمة مباشرة في الحصول على الخاصية واستخدامها للإشارة إلى القيمة بدلا من متغير مستوى الفصل.
giveacodicetagpre.متغير خاص (ربما مع Getter) يمنحك قيمة للقراءة فقط من الخارج من الخارج، ولكن لا يزال بإمكان الرمز الداخلي للفئة تغيير القيمة هذه.
لذلك قد يكون استخدام CONST Global (ربما باستخدام جزء اسم "مساحة الاسم") حلا أفضل في الحالات التي يكون فيها النسيان الأكثر أهمية.