یکی دیگر از قابلیتهای جذاب نسخهی جدید سیشارپ، عملگر nameof است. هدف اصلی آن ارائه کدهایی با قابلیت Refactoring بهتر است؛ زیرا به جای نوشتن نام فیلدها و یا متدها در صورت نیاز به صورت hard-coded، میتوانیم از این عملگر استفاده کنیم. به عنوان مثال در زمان صدور استثناءیی از نوع ArgumentNullException باید نام آرگومان را به سازندهی این کلاس پاس دهیم. متاسفانه یکی از مشکلاتی که با رشتهها در حالت کلی وجود دارد این است که امکان دیباگ در زمان ...
یکی از مهمترین مسائل، به خصوص در کارهای تیمی یا پروژههای اشتراکی، قرار دادن کامنتها یا اصطلاحا مستند نویسی است که بسیاری از برنامه نویسان با اینکه نظریه آنرا به شدت قبول دارند، ولی از انجام آن سرباز میزنند که به دو عامل تنبلی و عدم دانش نحوهی مستند نویسی بر میگردد. در این مقاله قصد داریم به سوالات زیر پاسخ دهیم: چرا به کامنت گذاری یا مستند نویسی نیاز داریم؟ چگونه کامنت بنویسیم؟ انواع کامنتها چیست؟ چه کام ...
قرار دادن تمامی تنظیمات نگاشتها درون کلاسهای پروفایل تا حدودی حجم کدهای ما را در آینده زیاد خواهد کرد. public class TestProfile1 : Profile
{
protected override void Configure()
{
// این تنظیم سراسری هست و به تمام خواص زمانی اعمال میشود
this.CreateMap<DateTime, string>().ConvertUsing(new DateTimeToPersianDateTimeConverter());
this.CreateMap<User, UserViewModel>();
// ...
در پروژه خود میتوانیم StructureMap را به گونهایی تنظیم کنیم که کار تزریق لایههای انتزاعی ASP.NET را نیز انجام دهد؛ مثلاً CurrentHttpContext و یا دادههای مربوط به مسیریابی و...
به عنوان مثال در برنامه شما ممکن است کدهای زیر چندین و چند بار تکرار شده باشند: var userId= User.Identity.GetUserId();
var user = _context.Users.Find(userId);
var user = int.Parse(User.Identity.GetUserId());
...
در برخی از مواقع بر روی اشیاء یک لیست، در یک کلاس، با استفاده از حلقههای foreach یا for کارهای متفاوتی انجام میشود. به عنوان مثال در یک لیست که از سطرهای فاکتور تشکیل شده است، میخواهیم جمع مقادیر کلیه سطرهای فاکتور یا جمع مبلغ یا مالیات یا تخفیف آنها را بدست آوریم . با وجود سادگی حلقههای foreach و for، ممکن است که در برخی از مواقع از راه متفاوتی استفاده شود. برای مثال اجازه بدهید مثال ذیل را با هم بررسی کنیم:
...
احتمالا تا حالا شده که میخواستید متدهایی بنویسید که دادههای ورودی رو چک
کنند و از درست بودن مقادیر اطمینان حاصل کنید و احتمالا کدهای شما هم مثل
نمونه پایین هستشpublic class timeclock
{
public void clockin( int32 id, datetime clockdate )
{
if ( id < 0 )
{
throw new argumentoutofrangeexception( "..." );
}
if ( clockdate.date != ...
این الگو چیز جدیدی نیست و قبلا تو سری مطالب «مروری بر کاربردهای Action و Func» دربارش مطلب نوشته شده و...
البته با توجه به جدید بودن این الگو اسم واحدی براش مشخص نشده ولی تو این مطلب «الگوی Delegate Dictionary» معرفی شده که بنظرم از بقیه بهتره.
به طور خلاصه این الگو میگه اگه قراره براساس شرایط (ورودی) خاصی کار خاصی انجام بشه بجای استفاده از IF و Switch از DictionaryوFunc یا ...
مثال ساده زیر را که در مورد تعریف یک کلاس Disposable و سپس استفاده از آن توسط عبارت using است را به همراه سه استثنایی که در این متدها تعریف شده است، در نظر بگیرید:
using System;
namespace TestUsing
{
public class MyResource : IDisposable
{
public void DoWork()
{
throw new ArgumentException("A");
}
public void Dispose()
{
throw new Argum ...
یکی دیگر از کاربردهای Action و Func، امکان حذف و بازنویسی switch statements بسیار حجیم و طولانی به نحوی شکیل است؛ و در ادامه این نوع Refactoring را بررسی خواهیم کرد.
در ابتدا مثال زیر را که از یک سوئیچ، برای انتخاب نوع حرکت و اعمال آن استفاده میکند، در نظر بگیرید:
using System;
namespace ActionFuncSamples
{
public enum Direction
{
Up,
Down,
Left,
...
طراحی API برنامه توسط Actionها
روش مرسوم طراحی Fluent interfaces، جهت ارائه روش ساخت اشیاء مسطح به کاربران بسیار مناسب هستند. اما اگر سعی در تهیه API عمومی برای کار با اشیاء چند سطحی مانند معرفی فایلهای XML توسط کلاسهای سی شارپ کنیم، اینبار Fluent interfaces آنچنان قابل استفاده نخواهند بود و نمیتوان این نوع اشیاء را به شکل روانی با کنار هم قرار دادن زنجیر وار متدها تولید کرد. برای حل ...