اهمیت ترتیب مقدار دهی فیلدهای استاتیک در زبان #C
فیلدهای استاتیکی که در سطح یک کلاس تعریف می‌شوند، برای نگهداری داده‌هایی به کار می‌روند که بین همه‌ی اشیاء ساخته شده‌ی از آن کلاس مشترک هستند. لذا برای دستیابی به آنها، نیاز به ساختن شیءای از آن کلاس نبوده و از طریق خود کلاس در دسترس خواهند بود. اما نکته‌ای در مورد فیلدهای استاتیک وجود دارد و آن هم ترتیب مقدار دهی به آنها است که در این مجال قصد دارم به آن بپردازم. در یک کلاس همانطور که می‌توانیم متد استاتیک و یا پراپرتی استاتیک ...
بازسازی کد: جایگزینی نوع‌های داده‌های یک کلاس با زیر کلاس‌ها
یک پیاده سازی از کلاس، می‌تواند به طور ضمنی شامل دو یا چند نوع (Type) باشد. یکی از ساده‌ترین راه‌های پیاده سازی این حالت، استفاده از فیلدهایی برای نگهداری نوع اصلی داده‌ی کلاس است که اصطلاحا Type code نیز نامیده می‌شوند. به طور مثال پیاده سازی زیر را در نظر بگیرید. به طور مثال در کلاس بالا یک کارمند می‌تواند فروشنده یا مهندس باشد. پیاده سازی بالا این مورد را با استفاده از دو فیلد نشان داده‌است که در صورت true بودن، مقدار هریک از ...
بازسازی کد: Encapsulate collection - ساده و خیلی مهم
زمانیکه متدی یک لیست (collection) را بر می‌گرداند، بهتر است این لیست، نسخه‌ای فقط خواندنی باشد. برای توضیح بیشتر این موضوع می‌توان به کلاس زیر و نحوه‌ی بازسازی آن رجوع کرد. در کلاس Person فرضی، متدی مسئولیت دریافت لیست درس‌های آن شخص را بر عهده دارد. متد دیگری نیز مسئولیت ثبت کردن آنها را بر عهده دارد. توجه کنید متد دریافت لیست درس ها، لیستی قابل ویرایش (افزودن یا حذف کردن) را بر می‌گرداند. در پیاده سازی ابتدایی، متدهای getter ...
طراحی و پیاده سازی زیرساختی برای مدیریت خطاهای حاصل از Business Rule Validationها در ServiceLayer
بعد از انتشار مطلب «Defensive Programming - بازگشت نتایج قابل پیش بینی توسط متدها »، بخصوص بخش نظرات آن و همچنین R&D در ارتباط با موضوع مورد بحث، در نهایت قصد دارم نتایج بدست آماده را به اشتراک بگذارم. پیش نیازها ‪Exceptions for flow control: why not? ‪Exception handling for flow control is EVIL! Replacing Throwing Exceptions with Notification in Validations نکات کار با استثناءها در دا ...
Defensive Programming - بازگشت نتایج قابل پیش بینی توسط متدها
در این مطلب یکی از اهداف Defensive Programming تحت عنوان Predictability مرتبط با متدها را بررسی کرده و تمرکز اصلی، بر روی مقدار بازگشتی متدها خواهد بود. پیش نیازها مطالب مرتبط با Defensive Programming نکات کار با استثناءها در دات نت به طور کلی، نتیجه حاصل از اجرای یک متد می‌تواند یکی از حالت‌های زیر باشد: متدی تحت عنوان ValidateEmail را تصور کنید. این متد از حیث بازگشت نتیجه به عنوان خروجی م ...
تهیه یک DynamicXml برای خواندن اطلاعات فایل Xml با استفاده از انقیاد پویا در سی‌شارپ
در فریمورک NET. ابزارهای مختلفی برای کار با داده‌های XML در نظر گرفته شده‌است که بعد از نسخه 3.5 آن، انتخاب اول LINQ to XML می باشد. در این مطلب قصد داریم API ای را برای خواندن اطلاعات فایل‌های XML با استفاده از LINQ to XML و انقیاد پویا در سی‌شارپ (Dynamic Binding) تهیه کنیم. راه حل اول: استفاده از ExpandoObject public static class ExpandoXml { public static dynamic AsExpando(this XDocument document) ...
تفاوت بین Interface و کلاس Abstract در چیست؟
یکی از سوالات مصاحبه‌ای که اکثر مواقع پرسیده میشود، تفاوت Interface و Abstract class می‌باشد؛ امیدوارم این مقاله برای شما مفید باشد. Interface چیست ؟ به طور کلی Interfaceها یک قالب اجرائی برای کلاسها می‌باشند. بدین صورت که با تعریف مشخصات کلی متدها، بدون پیاده سازی آنها، کلاسهای مشتق شده را ملزم به پیاده سازی کامل آن متدها میکند. بنابراین فقط مشخصات متدها یک بار در Interface تعریف می‌شوند و هر جا که لازم ...
پشتیبانی از انقیاد پویا در سی‌شارپ
زبان سی‌شارپ strongly typed و type safe است. کامپایلر بیشتر کد را از نظر صحت نوع (Type) بررسی میکند و در صورت بروز خطا، روند کامپایل متوقف خواهد شد. با این وجود سی‌شارپ اجازه میدهد که کدهای داینامیک نیز داشته باشیم؛ کدهایی که در زمان کامپایل برای کامپایلر ناشناس هستند و اگر خطای نوع در آنها وجود داشته باشد، در زمان اجرا مشخص شده و باعث توقف برنامه میشود. Type Safety ایمنی نوع، قاعده‌ای است در زبانهای برنامه‌نویسی که اجازه نمیدهد مت ...
آشنایی با ویژگی DebuggerTypeProxy در VS.Net
در مطالب قبلی، ویژگی DebuggerDisplay معرفی شده بود. ویژگی دیگری شبیه به این ویژگی وجود دارد به نام DebuggerTypeProxy که در ادامه به معرفی آن می‌پردازیم. کلاس زیر را در نظر بگیرید: public class Data { public string Name { get; set; } public string ValueInHex { get; set; } } پس از اجرای برنامه ، مقادیر کلاس ایجاد شده به این صورت خواهند بود : در اینجا مقدار He ...
تولید اطلاعات تصادفی توسط GenFu
گاها برای تولید اطلاعات تصادفی، خصوصا هنگام نوشتن تست‌ها، زمان زیادی بیهوده تلف شده و حجم زیادی کد اضافه تولید میشود. کتابخانه‌ای بنام GenFu ایجاد شده که وظیفه ایجاد داده‌های تصادفی را بر عهده گرفته‌است. این کتابخانه متن باز (Open Source) بوده و می‌توانید آن را از مخزن گیت‌هاب دریافت نمایید. در مطلب جاری قصد ایجاد اطلاعات تصادفی برای کلاس زیر را داریم : public class Person { public int ID { get; set; } ...