اگر به یک سری از کتابخانهها دقت کنید، تمام کلاسهای آنها دارای یک پیشوند تکراری هستند؛ مثلا SmurfXMLDataRow، SmurfXMLElement و الی آخر در مورد تمام کلاسهای موجود در پروژه. به این رویه «Smurf Naming Convention» گفته میشود!
در این نوع کتابخانهها زمانیکه کاربری بر روی دکمهای کلیک میکند، SmurfAccountView اطلاعات SmurfAccountDTO را به SmurfAccountController منتقل میکند. در ادامه از خاصیت SmurfID دریافتی، ...
یکی دیگر از کاربردهای Action و Func، امکان حذف و بازنویسی switch statements بسیار حجیم و طولانی به نحوی شکیل است؛ و در ادامه این نوع Refactoring را بررسی خواهیم کرد.
در ابتدا مثال زیر را که از یک سوئیچ، برای انتخاب نوع حرکت و اعمال آن استفاده میکند، در نظر بگیرید:
using System;
namespace ActionFuncSamples
{
public enum Direction
{
Up,
Down,
Left,
...
متد System.Math.Round که برای گرد کردن اعداد اعشاری به کار میرود، دارای 8 نوعoverload میباشد، که عدم توجه به موارد مربوط به آن باعث بروز خطا در محاسبات خواهد شد. به طور مثال پیش بینی شما از گرد کردن عدد 3.45 عدد 3.5 است ولی گاهی 3.5 و گاهی 3.4 گرد خواهد شد.
پس بهتر است تا با نکات زیر به شکل دقیق آشنا باشید.
Round(Decimal)
Rounds a decimal value to the nearest integral value.
...
طراحی API برنامه توسط Actionها
روش مرسوم طراحی Fluent interfaces، جهت ارائه روش ساخت اشیاء مسطح به کاربران بسیار مناسب هستند. اما اگر سعی در تهیه API عمومی برای کار با اشیاء چند سطحی مانند معرفی فایلهای XML توسط کلاسهای سی شارپ کنیم، اینبار Fluent interfaces آنچنان قابل استفاده نخواهند بود و نمیتوان این نوع اشیاء را به شکل روانی با کنار هم قرار دادن زنجیر وار متدها تولید کرد. برای حل ...
برای تبدیل تاریخ میلادی به تاریخ شمسی در packageهای SSIS میتوان از زبان سی شارپ استفاده کرد . بدین طریق میتوان در طی عملیات ETL و هنگام transform کردن دادهها ، عملیات تبدیل از میلادی به شمسی را انجام داد . عملیات تبدیل داده در این مثال به کمک Script Component انجام میشود.
برای این کار از دادههای موجود در پایگاه داده [AdventureWorksLT2008R2].[SalesLT].[Address] استفاده میکنم .
...
در ادامه مثال سوم قسمت قبل، در مورد حذف کدهای تکراری توسط Action و Func، در این قسمت به یک مثال نسبتا پرکاربرد دیگر آن جهت ساده سازی try/catch/finally اشاره خواهد شد.
احتمالا هزاران بار در کدهای خود چنین قطعه کدی را تکرار کردهاید:
try {
// code
} catch(Exception ex) {
// do something
}
این مورد را نیز میتوان توسط Actionها کپسوله کرد و پیاده سازی قسمت بدنه try آنرا به ...
در قسمت قبل از Func و Actionها برای ساده سازی طراحیهای مبتنی بر اینترفیسهایی با یک متد استفاده کردیم. این مورد خصوصا در حالتهایی که قصد داریم به کاربر اجازهی فرمول نویسی بر روی اطلاعات موجود را بدهیم، بسیار مفید است.
مثال دوم) به استفاده کننده از API کتابخانه خود، اجازه فرمول نویسی بدهید
برای نمونه مثال ساده زیر را درنظر بگیرید که در آن قرار است یک سری عدد که از منبع دادهای دریافت شدهان ...
delegateها، نوعهایی هستند که ارجاعی را به یک متد دارند؛ بسیار شبیه به function pointers در C و CPP هستند، اما برخلاف آنها، delegates شیءگرا بوده، به امضای متد اهمیت داده و همچنین کد مدیریت شده و امن به شمار میروند.
سیر تکاملی delegates را در مثال ساده زیر میتوان ملاحظه کرد:
using System;
namespace ActionFuncSamples
{
public delegate int AddMethodDelegate(int a);
public class DelegateSample
{
...
در مطلب قبل متوجه شدیم که Enumerable و Enumerator چه چیزی هستند و آنها را چگونه میسازند. در انتهای آن مطلب نیز قطعه کدی وجود داشت که در آن دیدیم چگونه یک شئ Enumerable میتواند در عملیاتی نسبتاً پیچیده یک شئ Enumerator ایجاد کند.
حال میخواهیم قابلیت زبانیای را بررسی کنیم که در اصل مشابه همین کاری که ما انجام دادیم یعنی ایجاد شئ جداگا ...
در این مقاله میخواهیم نحوهٔ ساخت اشیایی با خصوصیات Enumerable را بررسی کنیم. بررسی ویژگی این اشیاء دارای اهمیت است حداقل به این
دلیل که پایهٔ یکی از قابلیت مهم زبانی سیشارپ یعنی LINQ هستند. برای یافتن پیشزمینهای در این موضوع خواندن این مقالههای
بسیار خوب (۱ و
۲) نیز توصیه میشود.
Enumerableها ...