نوشته شده توسط
mahdie_farhani
NotInheritable , tryCast
traycast فکر کنم برای تغییر نوع باشه اگر اشتباه نکم
اینجا وارد بحث های مفهومی دات نت میشیم. زیاد بحث رو پیچیده نمی کنم و سعی می کنم به زبان ساده توضیح بدم.
در Visual Basic 6.0 زمانی که قصد داشتی تعدادی متد و روال های عمومی تعریف کنی که در تمام پروژه استفاده میشن، اونها رو در یک Module تعریف می کردی.
VB.NET ضمن حمایت از روش قدیمی Module، برای یکپارچگی با زبان های دیگه ی مبتنی بر پلت فرم دات نت و رعایت اصل جابجایی برنامه با رعایت استاندارد دات نت، نوع جدیدی از کلاس ها رو با عنوان کلاس های NotInheritable معرفی کرده که کلاس هایی که در نقش Utility ظاهر میشن، بدون نیاز به new کردن ازشون بشه به اعضای اونها دسترسی داشت.
چون کلاس های NotInheritable، غیر قابل به ارث برده شدن هستند و اعضای Shared نیز نمی تونن از Instance یک کلاس ایجاد بشن، پس بهترین کار این هست که اعضای یک کلاس NotInheritable رو Shared تعریف کنیم. از این طریق در مصرف حافظه نیز صرفه جویی میشه.
در #C، کلاس های sealed معادل NotInheritable و اعضای static معادل Shared در VB.NET هستند.
و اما در مورد TryCast و کاربرد اون:
قبلا هم در این مورد در چند تاپیک توضیح دادم.
در دات نت Casting های مختلفی وجود داره که شناخت دقیق، صحیح و استفاده ی بجا از اونها، تاثیر مستقیمی در Performance خواهد داشت.
انواع Casting های تبدیل نوعی به نوع دیگه در VB.NET شامل:
1) CType
DirectCast (2
TryCast (3
CType برای تبدیل هر نوع داده ای به همدیگه استفاده میشه و تمام تلاشش رو انجام میده تا نوع ها رو به هم تبدیل کنه. مثلا برای تبدیل Int32 به Double. در CType تفاوت در نوع هدف تبدیلی و اون چیزی که قرار هست بهش تبدیل بشه تا اونجایی که مجاز باشه وجود نداره.
DirectCast برای زمانی هست که نوع داده برای شما واضح هست. مثلا می دونید که کنترل شما حتما Button هست و لاغیر! هر چند که می تونید در این حالت از CType هم استفاده کنید اما DirectCast بهینه تر و دارای سرعت بالاتر هست.
TryCast هنگامی استفاده میشه که به انجام موفقیت آمیز عملیات تبدیل اطمینان ندارید! مثلا ممکنه کنترلی که به اون ارجاء پیدا کردید از نوع Button باشه اما قصد دارید تا اون رو به CheckBox تبدیل کنید. در این حالت استفاده از CType یا DirectCast باعث بروز خطای InvalidCastException میشه اما TryCast در صورتی که موفق به تبدیل نوعی به نوع دیگه نشه، مقدار Nothing (در VB.NET) و null (در #C) رو بر می گردونه که می تونید با شرط If این مورد رو چک کنید.
در #C معادلی برای DirectCast وجود نداره اما برای TryCast میشه از کلمه ی کلیدی as استفاده کرد:
Button obj_Btn = e.Row.FindControl("myButton") as Button;
if (obj_Btn != null)
{
//har kari doost dari ba Button bokon!
}
نوشته شده توسط
mahdie_farhani
. اصلاً عملکرد این کد چی هست رو می خواهم بدونم
تنها قسمت مهم اون کد، عبارت HttpContext.Current.CurrentHandler هست.
CurrentHandler به Context ای اشاره می کنه که در حال استفاده از کلاس هست. در اینجا ما می دونیم که یک Page قرار هست از این کلاس استفاده کنه. دلیل استفاده ی من از TryCast هم همین هست که در جای دیگه، مثلا یک وب سرویس استفاده از این کلاس معنا نداره و باعث بروز خطا میشه!
نوشته شده توسط
shahab_ksh
آقا بهروز این کد رو نمونه گذاشتم در نظر بگیرید شما چند تا کنترل با ID همنام در چند صفحه مختلف دارید که که کارهایی مثل این تابع رو انجام میده
Sub EmpData()
Label1.Text = ""
Massage.Text = "ok"
Textbox1.Text = "123"
EndSub
این تابع در اون صفحات وجود داره حال چطور میشه این تابع رو در فایل class1.vb قرار داد
نمیخام از راه های دیگر مثل یوسر کنترل ها یا ساخت کنترل های دینامیک استفاده کنم
پروسیجر فوق رو می تونی به شکل یک تابع با 3 ورودی از نوع کنترل ها تعریف کنی و در هر صفحه ای که دوست داشتی فراخوانیش کنی:
Public Sub doWork(ByVal obj_Label As Label, ByVal obj_Button As Button, ByVal obj_TextBox As TextBox)
obj_Label.Text = "Test Label"
obj_Button.Text = "Test Button"
obj_TextBox.Text = "Test TextBox"
End Sub
موفق باشید.