پاسخ : برنامه نویسی شیئ گرا در vb.net اعضاء حفاظت شده (Protected Members) حال یک مرور سربع بر سطوح دسترسی خواهیم داشت. اعضاء Public در دسترس همه بخشهای یک برنامه هستند) شامل کلاسهای خارجی(. اعضاء Friend یاInternal برای اعضای اسمبلی محلی (Local Assembly) در دسترس اما برای فراخوانیهای خارجی قابل دسترسی نیستند. اعضاء Private فقط درون کلاس خودشان قابل دسترساند و نمیتوانند مورد استفاده هیچ فراخوان دیگری (شامل کلاسهای وارث) قرار بگیرند. دو سطح دسترسی دیگر Protected و Protected Frind هستند. وقتی کلمه کلیدی Protectded با یک عضو کلاس استفاده میشود، آن عضو برای فراخوانیهای خارجی، سطح دسترسی مشابهی با کلمه کلیدی Private دارد. تفاوتشان در این است که اعضای Protected برای کلاسهای مشتق شده هم قابل دسترسی هستند. مثال زیر را ملاحظه کنید: کد: ‘The base class defines two methods: a private method and a protected ‘ method. Public Class BaseClass ‘ A private method cannot be called from derived classes Private Sub Method1() ‘ Implementation omitted End Sub ‘ A protected member can be called from derived classes Protected Sub Method2() ‘ Implementation omitted End Sub End Class ‘ The inherited class inherits from BaseClass Public Class InheritedClass Inherits BaseClass Public Sub Demo() ‘ This call is legal because the protected access level allows ‘ access to the member defined by the BaseClass Me.Method2() ‘ This call will not compile because it attempts to access a ‘ private member of the base class. Me.Method1() End Sub End Class</pre> مثال قبل تفاوت بین اعضاء Private و اعضاء Protected را نشان میدهد. متد Demo قصد دارد که از نمونهای از کلاس وارث Me، با فراخوانی Method1 و Method2 استفاده کند. چون هر دوی این متدها در کلاس پایه تعریف شدهاند، سطح دسترسی آنها تعیین شده، به هر حال آنها میتوانند از کلاس وارث فراخوانده شوند. فراخوانی Method2 موفقیت آمیز است اما از آنجاییکه Method1 خصوصی (Private) است، برای کلاسهای وارث در دسترس نیست. دومین سطح دسترسی Protect Friend است. این مورد ترکیبی از سطوح Protected و Friend است. بنابراین عضوی که Protect Friend است میتواند بوسیله کلاسهای درون اسمبلی یا کلاسهایی که از آن کلاس ارث میبرند استفاده شوند، به علاوه از درون کلاس خودش هم دردسترس است
پاسخ : برنامه نویسی شیئ گرا در vb.net کلاسها و اعضای مجرد وقتی کامپوننتهایی را میسازید، شاید بخواهید کلاس پایهای درست کنید که برخی اعمال ثابت را داشته باشد اما پیاده سازی دیگر اعضای آن را به کلاسهایی که از آن به ارث میبرند واگذار کنید. شما میتوانید با استفاده از کلاسهای مجرد Abstract Classes این کار را انجام دهید، کلاسهایی که باید به ارث رسیده شوند. کلاسهای مجرد شبیه اینترفیسها هستند، اما امکانات زیاد مشترکی با کلاسها دارند. یک کلاس مجرد نمیتواند خودش را مقداردهی کند، او باید اول ارث برده شود. کلاس مجرد میتواند همه یا مقداری از پیاده سازی یک کلاس واقعی را تامین کند و یا حتی هیچ پیاده سازیی از یک کلاس واقعی را ارائه نکند. آنها مانند اینترفیسها میتوانند اعضایی که باید درون کلاس وارث پیاده سازی شوند را تعیین کند. بر خلاف اینترفیسها یک کلاس، تنها میتواند از یک کلاس مجرد به ارث ببرد. مانند کلاسها، کلاسهای مجرد میتوانند پیاده سازی کاملی از اعضا را تامین کنند، اما همچنین برخلاف کلاسها، کلاسهای مجرد میتوانند اعضایی که باید توسط کلاسهای وارث پیاده سازی شوند را تعیین کنند. ساختن کلاسهای مجرد (Abstract Classes) بوسیله کلمه کلیدی MustInherit میتوانید کلاسی را کلاس مجرد کنید. کد: Public MustInherit Class AbstractClass ‘ Implementation omitted End Class</pre> تعریف اعضای مجرد مانند کلاس معمولی، کلاس مجرد میتواند هر عضوی را پیاده سازی کند. اعضای معمولی یک کلاس مجرد میتواند Overridable (مجازی) شود، در این مورد کلاسهای وارث میتوانند اعضایی که نیاز دارند را بسازند، یا میتوانند غیر مجازی شوند و بنابراین پیاده سازی ثابتی دارند که میتواند با همه اعضاء مشترک شود. کلاسهای مجرد هم میتواند اعضای مجرد تعیین کند. اعلان یک عضو مجرد بسیار شبیه اعلان یک عضو اینترفیس است. تنها نوع عضو، سطح دسترسی، پارامترهای مورد نیاز و نوعی که برگرداننده میشود تعیین میشود. هیچ جزییاتی راجع به پیاده سازی اعضایی که در متد اعلان شدهاند وجود ندارد. پس، فقط اعضاء اینترفیس تعیین میشوند. برای اعلان یک عضو مجرد، باید از کلمه کلیدی MustOverride استفاده کرد. اعضا مجرد باید درکلاسهای مجرد اعلان شوند. اگر سعی کنید عضو مجردی را در کلاس غیر مجردی اعلان کنید، کامپایلر خطایی اعلام خواهد کرد. مثال بفدی کلاس مجردی با ۳ عضو مجرد نشان می دهد: کد: Public MustInherit Class Car Public MustOverride Sub GoForward(ByVal i As Integer) Public MustOverride Function CheckSpeed() As Integer Public MustOverride Property Color() As String End Class</pre>
پاسخ : برنامه نویسی شیئ گرا در vb.net ارث بری از یک کلاس مجرد وقتی یک کلاس غیر مجرد از یک کلاس مجرد ارث میبرد، باید پیاده سازی برای هر یک از اعضا مجرد تعیین شده بوسیله کلاس مجرد تامین کند. مثال بعدی پیاده سازی از کلاس مجرد مثال قبلی را نشان میدهد. کد: Public Class MyCar Inherits Car Public Overrides Sub GoForward(ByVal I As Integer) ‘ Specific implementation of this method would go here End Sub Public Overrides Function CheckSpeed() As Integer ‘ Implementation for this method goes here End Function Public Overrides Property Color() As String Get ‘ Both the getter and the setter must be implemented End Get Set(ByVal Value As String) ‘ Setter implementation goes here End Set End Property End Class</pre> همچنین میتوانید کلاس مجرد جدیدی را با ارث بری از کلاس مجرد حاضری درست کنید. در این مورد، کلاس مجرد مشتق شده نیاز ندارد که پیاده سازیی برای اعضا مجرد تعیین شده در کلاس پایه تعریف کند. اما اگر نیاز باشد میتوان این اعضاء را نیز مجددا پیاده سازی کند.