Reflection در #C
یکشنبه 24 خرداد 1394Reflection یک نمونه از نوع اتصال به یک شی موجود را ایجاد می کند یا یک نوع از یک شی را دریافت می کند و روش ها و دسترسی به خواص آن ها را فراخوانی می کند .
Reflection یک نمونه از نوع اتصال به یک شی موجود را ایجاد می کند یا یک نوع از یک شی را دریافت می کند و روش ها و دسترسی به خواص آن ها را فراخوانی می کند . اگر در دستورات از ویژگی ها استفاده می کنید، Reflection شما را قادر می سازد به آن ها دسترسی داشته باشید .
استفاده از انواع (className)
می توانیم از متد typeof برای دریافت اطلاعات از متدها ، اعضا و به این ترتیب بخشی از کلاس خاص استفاده کنید . به مثال زیر توجه کنید :
مرحله 1:
مرحله 2:
این کد خروجی زیر را باز می گرداند:
همچنین می توانیم اطلاعات درباره ویژگی های یک کلاس خاص را دریافت کنیم. مانند نمونه زیر :
System.Reflection.PropertyInfo[] propertyInfo = _type.GetProperties(); foreach (PropertyInfo pi in propertyInfo) { Console.WriteLine(pi.Name); }
مرحله 3:
اگر این دستور را به دستورات قبلی اضافه کنیم خروجی به این صورت می شود :
استفاده از ()GetType
با استفاده از متد GetType از کلاس System.Reflection می توانیم یک assembly inspected دریافت کنیم . دستورات به این صورت هستند :
مرحله 4:
کلاس System.Reflection
همانطور که مشاهده شد،تفاوت زیادی بین GetType و typeof وجود ندارد . تفاوت عملکردی بین این دو چیست ؟
typeof یک کلمه کلیدی #C است که زمانی که نام کلاس را داریم استفاده می شود. آن در زمان کامپایل محاسبه می شود و بنابراین نمی تواند در نمونه ای که در زمان اجرا ایجاد شده استفاده شود . GetType متدی از کلاس می باشد که می تواند در یک نمونه مورد استفاده قرار گیرد .
اتصال اولیه(Early Binding) در مقابل اتصال بعدی (Late Binding)
- عملکرد در اتصال اولیه خوب خواهد بود.
- برنامه ها در اتصال اولیه سریع تر اجرا می شوند ،از آنجایی که هیچ boxing و Unboxing در اینجا انجام نشده، اما در اتصال ثانویه به تبدیل نوع برای رمز گشایی در زمان اجرا نیازمندیم .
-در اتصال اولیه (Early Binding) نوشتن کد آسان تر است ، از زمانی که واژه هوش در تکنولوژی در معرض عموم قرار گرفت .
- در اتصال اولیه احتمال خطای کمتری وجود دارد،از آنجایی که دستورات در زمان کامپایل بررسی شده اند اما در اتصال بعدی احتمال خطای بیشتری در زمان اجرا وجود دارد .
- اتصال ثانویه همه انواع نسخه ها را به دلیل توزیع در زمان اجرا پشتیبانی می کند .
- اگر اتصال ثانویه مورد استفاده قرار گیرد ،تاثیر دستورات در پیشرفت هی آینده به حداقل می رسد .
اتصال ثانویه با استفاده از Reflection
اتصال ثانویه می تواند با استفاده از Reflection انجام شود . برای مثال،در برخی برنامه ها،نمی دانیم کدام assembly برای بار گذاری در زمان کامپایل است ، بنابراین از کاربر درخواست می کنیم که نام و نوع assembly را در زمان اجرا وارد کند و برنامه می تواند آن را بارگذاری کند.برای این منظور،System.Reflection.Assembly سه روش استاتیک ارائه می دهد که اجازه می دهد یک فایل را به سادگی بار گذاری کنید : LoadForm ، Load و LoadWithPartialName . این متد ها به LoadLibrary Win32 API شباهت دارند . فضای نام System.Reflection با assembly و metadata کار می کند.
مرحله 5:
در اینجا مثالی از استفاده Lata Binding در #C با استفاده از Reflection ذکر شده است:
باید آدرس DLL در سیستم را تغییر دهید. همانطور که در دستورات قبلی مشاهده کردید متد ()GetType در زمان اجرا است .
- C#.net
- 3k بازدید
- 1 تشکر