سؤال

لقد حاولت إنشاء فئة نصوص برمجية 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 (ربما باستخدام جزء اسم "مساحة الاسم") حلا أفضل في الحالات التي يكون فيها النسيان الأكثر أهمية.

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