PDA

View Full Version : سوال: در مورد دستوری در VB.net



b1nahayat
پنج شنبه 20 مرداد 1390, 16:26 عصر
من با این Property در VB.net مشکل دارم.
تو سایت گشتم چیزی پیدا نکردم.
مثلا نمیدونم که دستور زیر کارش چیه:

Public Property Prop1() As String
Get
Return PropertyValue
End Get
Set(ByVal Value As String)
PropertyValue = Value
End Set
End Property

مثلا این جا Get چیه؟ Set چیه؟
ممنون میشم اگه کسی بتونه بهم کمک کنه.

alimanam
پنج شنبه 20 مرداد 1390, 20:10 عصر
مثلا نمیدونم که دستور زیر کارش چیه:با سلام

پروپرتی به زبان عامیانه همون خاصیت هستش یا ویژگی مثلا شما یک کلاس میخواین بنویسین که برای مثال یک ویژگی داشته باشه مثلاً این کلاس دارای ویژگی کانکشن استرینگ هستش ! خوب برای این کار یکی از روش هاش اینه که بیای براش Property بنویسی .


مثلا این جا Get چیه؟ Set چیه؟در get شما مقدار پیش فرض اون Property رو ست میکنین و در set به اون مقدار میدین . برای مثال :

Private _myconString As String = String.Empty
Public Property MyConnectionString As String
Get
Return "Your Connection String Here !"
End Get
Set(ByVal value As String)
_myconString = value
End Set
End Property

که در این کد مقدار پیش فرض این خاصیت همونی هست که در بین 2تا گیومه هستش ( قسمت Get ) و در قسمت set میتونه مقدار این خاصیت رو به دلخواه خودش تغییر بده .

موفق باشید ./

b1nahayat
پنج شنبه 20 مرداد 1390, 22:10 عصر
ممنون از راهنمایت. خیلی بهم کمک کرد.
فقط یه سوال دیگه هم بود.


Shared Function
Protected MainForm As Form1
Overrides Function

میدونی این دستورات چه کاری انجام میدن ؟
من هر کاری کردم نفهمیدم ! :گیج:

alimanam
جمعه 21 مرداد 1390, 11:19 صبح
با سلام


Shared Functionما هنگامی که یک تابع یا روال رو در کلاسی مینویسیم در اکثر مواقع به صورت خصوصی (Private ) یا عمومی ( Public ) تعریف میکنیم درسته ؟ خوب حالا برای استفاده از این تابع یا روال در یک کلاس دیگه به طبع باید یک Object از اون کلاس به ارث ببریم که قابل استفاده باشه ! خوب حالا یه کسی به حسب نیاز پروژه اش میخواد بدون اینکه بخواد از اون کلاس یه آبجکت بسازه از اون تابع در جایی استفاده کنه خوب تکلیف چیه ؟ راه حلش اینه که بیای این تابع رو یا روال رو به اشتراک ( Share ) بزاری که این کار بوسیله کلمه کلیدی ( Shared ) قابل انجام هستش ( تابع رو به اشتراک بزاری )
دقیقا مثل اینکه شما این روال یا تابع رو درون یک Module گذاشته باشین . ( یعنی بدون ساختن یک آبجکت از اون , قابل استفاده در پروژه است )


Public Class clsMath

Shared Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function

End Class


حالا شما خیلی راحت بدون اینکه آبجکتی از این کلاس بسازی میتونی از اون در پروژه خودت استفاده کنی یعنی اینجوری فراخونی اش کنی :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(clsMath.Add(3, 4))
End Sub


Protected MainForm As Form1درمورد کلمه کلیدی Protected هم همونطور که از اسمش پیداست به یه آبجکت یا کلاس سطح دسترسی میده که این شامل همه آبجکت ها و اشیاء درون اون به فرض کلاس هم میشه .


Overrides Functionدر مورد اورلیدز کردن هم به اختصار باید عرض کنم که بیشترین کاربردش در بحث وراثت اشیاء و کلاس ها میتونه باشه یعنی اینکه ما به طور مثال یک کلاس داریم به اسم Animal که در اون کلاس یک سری ویژگی ( Property ) برای اون در نظر گرفتیم ( مثلا تعداد پاهای این حیوان و سرعتش و یا اینکه میتونه پرواز کنه یا نه ! ) حالا یک کلاس دیگه به اسم ( Dog ) داریم که از کلاس مادر ( کلاس Animal ) مشتق گرفته شده , خوب حالا ما باید برای کلاس مشتق گرفته شده از کلاس مادر خودمون که کلاس Animal باشه رو ویژگیهاشو به ارث ببریم پس با استفاده از کلمه کلیدی Overrides میاییم این ویژگیها رو جایگزین ویژگی اصلی اون کلاس مادر میکنیم . برای اینکه بیشر متوجه بشی یه این مثال کوچولو نگاهی بنداز !

کلاس مادر ( Animal ) :

Public Class Animal

Protected _NumberOfLegs As Integer = 2
Public Overridable ReadOnly Property NumberofLegs() As Integer ' Tedade paha !
Get
Return Me._NumberOfLegs
End Get
End Property

End Class

خوب همونطور که میبینی ر این کلاس ما یه ویژگی داریم ک تعداد پاهای یک حیوان رو مشخص میکنه که چندتا داره !!!

حالا یک کلاس به اسم کلاس Dog داریم که با استفاده از کلمه کلیدی Inherits اون رو نسبت ( مشتق گرفتیم) دادیم به کلاس مادر که Animal باشه .

Public Class Dog
Inherits Animal

Public Sub New()
Me._NumberOfLegs = 4
End Sub

Public Overrides ReadOnly Property NumberOfLegs() As Integer
Get
Return Me._NumberOfLegs
End Get
End Property


خوب همونطور که میبینی ما بوسیله کلمه کلیدی Overrides اومدیم تعداد پاهای سگ رو که خودش از کلاس مادر مشتق گرفته شده رو مشخص کردیم ( جایگزین کردیم ( قبلا پیش فرضش 2 بود شد 4 ! ))

برای اطلاعات بیشتر جستجو - تمرین - پشتکار !

موفق باشید ./

b1nahayat
جمعه 21 مرداد 1390, 12:54 عصر
- من دستوراتتون رو در مورد "Shared Function" وارد کردم. به جای shared , من Public رو قرار دادم و هیج تفاوتی در برنامه به وجود نیومد.
- راستی منظورتون از "اید یک Object از اون کلاس به ارث ببریم" چیه؟ (ببخشید این سوال رو میکنم. مبتدی هستم.)
- "Protected MainForm As Form1" این هم این طوری که پیداست اصلا هیچ فایده ای نداره! آخه MainForm که تعریف شده اصلا هیچ کاری نمیشه باهاش کرد.
- یه سوال دیگه: چرا وقتی که به کلاس از کلاس دیگه به ارث میبره، همه چیزش قفل میشه؟ اصلا حیتی نمیشه بهش تکست باکس اضافه مرد و بشه باهاش کار کرد !

alimanam
جمعه 21 مرداد 1390, 13:50 عصر
من دستوراتتون رو در مورد "Shared Function" وارد کردم. به جای shared , من Public رو قرار دادم و هیج تفاوتی در برنامه به وجود نیومد.حواب سوال 2 شما رو میشه به سوال 1 ربط داد ! وقتی که شما کلمه کلیدی Shared رو از ابتدای تابع بردارین عملاً برای استفاده از این تابع که در کلاس clsMath هستش باید یک آبجکت از اون کلاس بسازین یعنی اینجوری :

Public Class Form1
Dim objclsMath As New clsMath
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(objclsMath.Add(2, 4))
End Sub
End Class

اگه اینکار رو نکنین به هیچ وجه دسترسی به تابع Add کلاس clsMath نخواهید داشت ولی اگه تابع رو به اشتراک بزارین ( Share ) کنین به راحتی بدون اینکه آبجکتی از کلاس بسازین قادرین به تابع مذکور دسترسی داشته باشین .


"Protected MainForm As Form1" این هم این طوری که پیداست اصلا هیچ فایده ای نداره! آخه MainForm که تعریف شده اصلا هیچ کاری نمیشه باهاش کرد.عجب ! یعنی شما نمیدونین باید به این صورت تعریفش میکردین ؟!

Public Class Form2

Protected m As New Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
m.Text = "New Form1 !"
m.Button2.Enabled = False
m.ShowDialog()
End Sub

End Class



یه سوال دیگه: چرا وقتی که به کلاس از کلاس دیگه به ارث میبره، همه چیزش قفل میشه؟ اصلا حیتی نمیشه بهش تکست باکس اضافه مرد و بشه باهاش کار کرد ! جوابش رو در پاسخ سوال قبلی دادم .

در ضمن بیشتر مطالعه کنین بعدا به مباحث پیشرفته Object-Oriented Programming بپردازین !!!

موفق باشید ./

b1nahayat
جمعه 21 مرداد 1390, 16:20 عصر
اگه اینکار رو نکنین به هیچ وجه دسترسی به تابع Add کلاس clsMath نخواهید داشت ولی اگه تابع رو به اشتراک بزارین ( Share ) کنین به راحتی بدون اینکه آبجکتی از کلاس بسازین قادرین به تابع مذکور دسترسی داشته باشین .!!! یعنی VB.net من مشکل داره داره دیگه ‍!
من نه shared رو قرار دادم، نه آبجکت ساختم. ولی بازم کار کرد.
اصلا سورسش رو هم اضافه میکنم ببینی.73707



Public Class Form2

Protected m As New Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
m.Text = "New Form1 !"
m.Button2.Enabled = False
m.ShowDialog()
End Sub

End Class


مثلا این جا به جای Protected , ما Public رو بزاریم چه فرقی میکنه ؟

alimanam
جمعه 21 مرداد 1390, 16:30 عصر
خوب این پروژه چه ربطی به موضوع بحث داره !!!!!!!!!!!!!!!!!!!!!! من دارم در مورد Class صحبت میکنم شما اومدی یه تابع عمومی رو در فرم 2 نوشتی بعد در رخداد لود فرم 1 اون رو فراخونی کردی خوب این چه ربطی به موضوع بحث ما داشت ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
سورس ضمیمه رو ببین متوجه میشی البته با توجه به اینکه میگی مبتدی هستی شاید بازم .... به هرحال بیشتر مطالعه کن کم کم متوجه میشی .

موفق باشی ./