در آموزش قبل با اعلان دو متغیر Public کلاس Fruit خواص (Properties) name و color را ایجاد کردیم. در ادامه آموزش قبل می خواهیم کاربرد روال Property Let در برنامه نویسی شیءگرا و کپسوله سازی (مخفی سازی) داده ها در VBA را بررسی کنیم.
فهرست مطالب
انواع روال Property در VBA
کاربرد روال Property در VBA ایجاد خواص سفارشی می باشد. VBA سه نوع روال Property پشتیبانی می نماید که بطور خلاصه کاربرد هر یک در جدول زیر مشخص شده است:
روال | کاربرد |
---|---|
Property Let | مقدار یک ویژگی را تعیین می نماید. یک ویژگی فقط نوشتنی (write-only) برای یک کلاس ایجاد می نماید. |
Property Get | مقدار یک ویژگی را برمی گرداند. یک ویژگی فقط خواندنی (read-only) برای یک کلاس ایجاد می نماید. |
Property Set | مرجع یک ویژگی را تعیین می نماید. |
در این آموزش کاربرد روال Property Let در برنامه نویسی شیءگرا در VBA و ایجاد خواص برای یک کلاس را بررسی می کنیم.
روال Property Let و کپسوله سازی داده ها در VBA
در کدهای زیر با استفاده از روال Property Let دو ویژگی name و color را برای کلاس Fruit ایجاد می کنیم.
Private fruitName As String
Private fruitColor As String
Property Let name(name As String)
fruitName = name
End Property
Property Let color(color As String)
fruitColor = color
End Property
روال Property Let باید حداقل یک آرگومان داشته باشد. با توجه به اینکه روال Property Let یک ویژگی فقط نوشتنی ایجاد می کند، الزام به وجود حداقل یک آرگومان بدیهی می باشد.
VBA دو ویژگی هم نام با دو روال Property Let یعنی name و color برای کلاس Fruit ایجاد می نماید.
fruitName و fruitColor دو متغیر هستند که با استفاده از دستور Private اعلان شده اند. این دو متغیر خارج از کلاس Fruit در دسترس نیستند این به این معناست که اگر یک شیء از کلاس ایجاد نمایید، نمی توانید مقادیر این دو متغیر را بخوانید یا تغییر دهید.
کاربرد این دو متغیر نگهداری داده های کپسوله شده درون شیء می باشد. روال Property Let در فرایند کپسوله سازی نقش هدایت داده ها به سمت محل ذخیره امن را بر عهده دارد.
امتحان کدها
کدهای بالا را در پنجره کد کلاس Fruit آموزش قبل کپی و جایگزین نمایید.
از منوی Insert روی گزینه Module کلیک نمایید تا یک ماژول (استاندارد) ایجاد گردد. کدهای زیر را در پنجره کد ماژول جدید کپی کنید.
Sub test()
Dim apple As New Fruit
apple.name = "apple"
apple.color = "red"
End Sub
تحلیل کدها
خط 2: در این خط همزمان با اعلان متغیر شیء apple یک نمونه جدید از شیء Fruit ایجاد نموده ایم.
از خط دوم به بعد یعنی بعد اعلان شیء جدید از روی کلاس Fruit در صورتی که بعد از نام متغیر شیء (apple) علامت . (نقطه) را تایپ نمایید ویرایشگر VBA خواص name و color را در یک لیست مانند تصویر نمایش خواهد داد.
توجه دارید که این ویژگی در صورتی فعال خواهد بود که کلاس شیء در خط اعلان صریحاً مشخص شده باشد.
خط 4 و 5: در این دو خط مقدار خواص name و color را تعیین کرده ایم. شیء apple مقادیر apple و red را برای دو ویژگی خود دریافت می کند و در مخزن داده های خود یعنی دو متغیر fruitName و fruitColor ذخیره می نماید.
دریافت مقدار یک ویژگی
دریافت مقدار یک ویژگی که با روال Property Let ایجاد شده است امکان پذیر نمی باشد، چرا که این روال یک ویژگی فقط نوشتنی (write-only) ایجاد می کند.
در صورتی که بخواهید مقدار این نوع خواص را دریافت نمایید یک خطای کامپایلر ایجاد خواهد شد. کدهای زیر را در ادامه ماژول استاندارد قبلی کپی نمایید.
Sub test1()
Dim orange As New Fruit
Dim objectName As String
orange.name = "orange"
objectName = orange.name
End Sub
در پنجره Immediate نام روال test1 را تایپ و کلید Enter را فشار دهید. همانطور که در تصویر مشاهده می کنید کامپایلر VBA خطای Invalid use of property
را ایجاد می نماید و عملیات متوقف می شود.
برای خواندن یک ویژگی Property Let باید از روال Property Get استفاده نمایید. در آموزش های بعدی می توانید نحوه دریافت مقدار یک ویژگی Property Let با استفاده از روال Property Get را بیاموزید.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه