
آموزش اصولی ترین روش ها در رفلکشن و سی شارپ
آموزش اصولی ترین روش ها در رفلکشن و سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی بهترین روش ها در کار کردن با رفلکشن و سی شارپ است که با نام اصلی Using Reflection C# - Best Practices از شرکت Pluralsight منتشر شده است.
کاربردهای رفلکشن در برنامه نویسی
از رفلکشن می توانید برای بدست آوردن اطلاعات مربوط به تایپ های مختلف در زمان runtime استفاده کرد. کلاس هایی که در رابطه با عملیات رفلکشن مورد استفاده قرار میگیرد می توانند metadata ها را در رابطه با برنامه ای که در حال اجرا است به شما بدهد. این کلاس ها در یک namespace به نام System.Reflection تعریف شده اند. این namespace شامل کلاس هایی است که اجازه می دهند شما بتوانید اطلاعاتی را در رابطه با یک اپلیکیشن و تایپ های مختلف را بدست بیاورید. علاوه بر این می توانید با استفاده از این namespace اقدام به اضافه کردن تایپ ها و حتی object های مختلف به برنامه کرد. در ادامه به بررسی برخی از کاربردهای رفلکشن در برنامه نویسی می پردازیم. استفاده کردن از رفلکشن می تواند مزیت های مختلفی را به یک نرم افزار اضافه کند که در رابطه با آنها در قسمت زیر صحبت خواهیم کرد.
- رفلکشن اجازه می دهد تا شما بتوانید اطلاعات مختلفی را در رابطه با تایپ های مختلف برنامه در زمان runtime بدست بیاورید.
- رفلکشن اجازه می دهد تا شما بتوانید تایپ های مختلف را در یک اسمبلی بررسی کرده و از آنها نمونه سازی یا instantiate انجام دهید.
- با استفاده از رفلکشن می توانید late binding را برای متدها و property های مختلفی که در یک اسمبلی وجود دارد لحاظ کرد.
- با استفاده از رفلکشن می توان در زمان runtime اقدام به ایجاد کردن تایپ ها کرد و سپس با استفاده از تایپ ها عملیات مختلفی را انجام داد.
کاربرد رفلکشن در سی شارپ
با استفاده از قابلیت رفلکشن در زبان برنامه نویسی سی شارپ می توانیم metadata های مربوط به تایپ های مختلف را در زمان runtime بدست بیاورید. به عبارت دیگر شما می توانید از رفلکشن با وسیع کردن metadata های مربوط به تایپ های مختلف استفاده کرده و سپس به صورت پویا و dynamic برنامه نویسی کنید. برنامه نویسی به صورت dynamic به این معناست که شما اطلاعاتی را در رابطه به اسمبلی های بارگذاری شده بدست آورده و تایپ های درون هر کدام از آنها را بررسی می کنید و سپس در صورت تمایل می توانید از تایپ های مختلف نمونه سازی کرده و در استفاده از آنها وظایفی را انجام دهید. تکنیک رفلکشن در سی شارپ شبیه به تکنیک RTTI که مخفف Runtime Type Information در سی پلاس است عمل می کند.

برای کار کردن با تکنیک رفلکشن در سی شارپ و دات نت می بایست از namespace به نام System.Reflection در برنامه خود استفاده کرد. سپس می توانیم با استفاده از یک کلاس به نام Type اطلاعات مربوط به تایپ های مختلف یک اسمبلی را بدست بیاوریم. البته یک تایپ می تواند نمایانگر یک اسمبلی و یا حتی module های مختلف درون آن نیز باشد. از رفلکشن می توان برای ایجاد کردن یک instance و یا نمونه یک تایپ به صورت dynamic استفاده کرد. علاوه بر این موضوع می توان متدهایی را بر روی تایپ های مختلف اصطلاحا invoke و یا فراخوانی کرد. در قسمت زیر کلاس هاس مختلفی که درون این namespace یعنی System.Reflection تعریف شده اند را می بینید.
- Assembly, Module
- Enum
- MethodInfo
- ConstructorInfo
- MemberInfo
- ParameterInfo
- Type
- FieldInfo, EventInfo
- PropertyInfo
Reflection در سی شارپ چگونه کار میکند؟
Reflection در C# قابلیتی است که به برنامه اجازه میدهد در زمان اجرا، اطلاعات مربوط به Typeها، متدها، Propertyها و سایر اعضای یک ساختار را بررسی کند. این اطلاعات که با عنوان Metadata شناخته میشوند، به توسعهدهنده امکان میدهند بدون نیاز به شناخت کامل ساختار تمام اجزای برنامه در زمان کامپایل، اطلاعات موردنیاز را در Runtime به دست آورد. Reflection در فضای نام System.Reflection قرار دارد و یکی از قابلیتهای مهم دات نت برای کار با ساختارهای پویا و توسعهپذیر محسوب میشود.
آشنایی با Reflection زمانی اهمیت پیدا میکند که برنامه باید با Typeهای مختلف کار کند یا اطلاعات ساختاری آنها را در زمان اجرا بررسی کند. برای مثال، میتوان از این قابلیت برای شناسایی اعضای یک Object یا ایجاد نمونهای از یک Type استفاده کرد. البته Reflection در مقایسه با فراخوانی مستقیم اعضای شناختهشده، پیچیدگی بیشتری دارد و استفاده از آن باید با توجه به نیاز واقعی برنامه انجام شود. درک اصول این فناوری به شما کمک میکند از قابلیتهای آن آگاهانهتر استفاده کنید.
ساخت Object به صورت پویا در C#
در برنامهنویسی C# معمولاً هنگام ایجاد یک Object، نوع آن از قبل مشخص است؛ اما در بعضی سناریوها لازم است برنامه بر اساس اطلاعاتی که در زمان اجرا دریافت میکند، نمونهای از یک Type را ایجاد کند. Reflection چنین امکانی را فراهم میکند و به توسعهدهندگان اجازه میدهد Constructorها را بررسی کرده و برای ساخت Instance از آنها استفاده کنند. این قابلیت در شرایطی که ساختار موردنیاز برنامه از پیش بهصورت ثابت مشخص نشده است، میتواند مفید باشد.

علاوه بر ایجاد Instance، Reflection امکان بررسی و دسترسی به اعضای Objectها را نیز فراهم میکند. با این حال، هنگام استفاده از این روش باید به نوع دادهها، سطح دسترسی اعضا و احتمال بروز خطا در زمان اجرا توجه داشت. اگر نوع یا عضو موردنظر پیدا نشود، عملیات ممکن است با خطا مواجه شود؛ بنابراین، مدیریت خطا و بررسی شرایط اجرای کد اهمیت زیادی دارد. در این آموزش با ساخت و تغییر Objectها از طریق Reflection آشنا میشوید و درک بهتری از مدیریت پویای Typeها در C# به دست میآورید.
ترکیب Reflection و Generics در سی شارپ
Generics در C# امکان تعریف کلاسها، متدها و ساختارهایی را فراهم میکند که بتوانند با Typeهای مختلف کار کنند، بدون اینکه لازم باشد برای هر نوع داده پیادهسازی جداگانهای نوشته شود. ترکیب Generics با Reflection به توسعهدهندگان اجازه میدهد اطلاعات Typeها را بهصورت پویا بررسی کنند و در عین حال از قابلیتهای ساختارهای Generic بهره ببرند. این ترکیب در طراحی ابزارها و بخشهایی از برنامه که باید با انواع مختلف داده سروکار داشته باشند، کاربرد دارد.
کار با Typeهای Generic از طریق Reflection میتواند نسبت به کار با Typeهای معمولی پیچیدگی بیشتری داشته باشد؛ زیرا باید به پارامترهای نوع و نحوه ساختهشدن ساختارهای Generic توجه کرد. شناخت این مفاهیم کمک میکند هنگام بررسی Metadata یا ایجاد Instanceهای مختلف، رفتار برنامه قابل پیشبینیتر باشد. این آموزش پیشرفته به بررسی ارتباط Reflection و Generics میپردازد و زمینهای فراهم میکند تا بتوانید در طراحی راهکارهای پویا در دات نت، از این دو قابلیت با درک دقیقتری استفاده کنید.
سرفصل مطالب آموزش ویدئویی اصولی ترین روش ها در رفلکشن و سی شارپ
فصل اول: مقدمه دوره آموزشی
- مقدمه دوره آموزشی
فصل دوم: استفاده از رفلکشن برای بررسی کردن Meta Data
- مقدمه
- پیش نیاز های دوره آموزشی
- بررسی فریم ورک ها و Tooling ها
- تعریف کردن رفلکشن
- کاربرد های استفاده کردن از رفلکشن ها و موضوعات مهم
- معرفی اپلیکیشن این دوره آموزشی
- بررسی کردن عملی یک Type
- به دست آوردن عملی اطلاعات مربوط به یک Type
- بررسی کردن فرم های خاص Metod INFO
- مقایسه Early Binding و Late Binding
- کنترل کردن روش جستجو در رفلکشن با استفاده از Binding Flag ها
- جمع بندی
فصل سوم: ساختن Instance و تغییر دادن Object ها
- مقدمه
- معرفی اپلیکیشن این دوره آموزشی
- فراخوانی توابع Constructor
- فراخوانی یک Constructor بصورت پویا با استفاده از نام
- کار کردن با Object ها از طریق Interface ها
- کار کردن با Object ها از طریق Dynamic ها
- به دست آوردن مقادیر و تنطیم کردن مقادیر درون پروپرتی ها و فیلد ها
- فراخوانی متد ها
- بررسی پشت پرده رفلکشن
- نوشتن یک اپلیکیشن Self-configuring Network Monitor
- پیاده سازی عملی اپلیکیشن
- جمع بندی
فصل چهارم: استفاده کردن از رفلکشن در کنار جنریک ها
- مقدمه
- چندین موضوع مهم در رابطه با جنریک ها
- بررسی عملی جبریک Intense ها
- ایجاد کردن عملی جنریک Intense ها
- فراخوانی عملی متد های جنریک
- بررسی ساختن یک IoC Container
- ساختن عملی یک IoC Container و پشتیبانی کردن از Constructor Injection و Unbound Generic ها
- جمع بندی
فصل پنجم: مباحث پیشرفته
- مقدمه
- موضوعات امنیتی در رابطه با رفلکشن
- استفاده کردن از رفلکشن Magic
- استفاده کردن عملی از رفلکشن Magic
- جمع بندی







