<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های اسحاق جباری</title><link>https://virgool.ir/feed/@jabbari.eshaq</link><description>یه برنامه نویس تازه کار asp.net core که عاشق یادگیری و پیشرفت تو دنیای برنامه نویسیه...</description><language>fa</language><pubDate>2026-11-12 09:44:58</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>اسحاق جباری</title><link>https://virgool.ir/@jabbari.eshaq</link></image><item><title>عدد بودن یا نبودن؛ مسئله این است!</title><link>https://virgool.ir/@jabbari.eshaq/عدد-بودن-یا-نبودن-مسئله-این-است-blfgk16gxhmt</link><description>سلام رفقا! امیدوارم حالتون خوب باشهحتما تو پروژه هاتون پیش اومده که لازم باشه عدد بودن یه رشته رو تو سی شارپ بررسی کنی و سر راهش شرط بزاری تا بتونی منطق برنامه رو پیش ببری... اما چه جوری؟در ادامه با من همراه باشبررسی عدد بودن یه رشته تو #C خیلی سادس، به راحتی آب خوردناولین کاری که باید کرد این که رشته رو تعریف کنی (به هر شکل یا ثابت یا از کاربر بگیری)string stringNumber = &#34;a123&#34;حالا:bool isNum = int.TryParse(stringNumber, out int res);این خط کد می گه این رشته ای رو که به من دادی رو سعی می کنم به int تجزیش کنم و اون رو تو متغییر از جنس int با نام دلخواه خودت می ریزم!حالا داستان bool isNum چیه؟ خب این متد یه مقدار bool بر می گردونه یعنی اگه عدد بود true اگرم نه که false!حالا به راحتی تو یه شرط می زاریمش و لاجیک برنامه رو پیاده سازی می کنیم:if (isNum) {&#xA;      Console.WriteLine(res);&#xA;}&#xA;else&#xA;{&#xA;      Console.WriteLine(&#34;This String in not number!&#34;);&#xA;}خب رفقا امید وارم این مقاله به کارتون بیاد و بپسندیدش!خیلی مخلصیم</description><category>اسحاق جباری</category><author>اسحاق جباری</author><pubDate>Wed, 19 Jan 2022 09:39:46 +0330</pubDate></item><item><title>virtual در سی شارپ</title><link>https://virgool.ir/@jabbari.eshaq/virtual-در-سی-شارپ-vwye63vxmvjr</link><description>سلام دوست من امیدوارم حالت خوب باشه، تو این مقاله میخوام درباره virtual بحث کنممتد virtual یکی از راه های پیاده سازی پلی مورفیسم در زبان برنامه‌نویسی #C هستفرض کنید یک کلاس والد داریم به نام Shape که تو اون یه متد داریم به نام Draw که وظیفش ترسیم یک شیء یا شکل هست. این متد در تمام کلاس‌هایی که از این کلاس ارث بری می کنن هم قابل استفاده است. بنابراین کلاس Shape را به صورت زیر می‌نویسم:public class Shape&#xA;{&#xA;    public void Draw()&#xA;    {&#xA;        Console.WriteLine(&#34;Drawing the shape!&#34;);&#xA;    }&#xA;}حال فرض کنید یه کلاس‌ دیگه تعریف می کنیم  به نام Rectangle که از کلاس والد یعنی Shape ارث بری می کنه:public class Rectangle : Shape&#xA;{&#xA;        &#xA;}حالا این کلاسی که تعریف کردیم به راحتی می تونه از متد Draw استفاده کنه، چرا؟! جوابش مشخصه! چون این متد در کلاس اصلی والد تعریف شده:var rect = new Rectangle();&#xA;&#xA;rect.Draw();&#xA;&#xA;Console.ReadKey();و نتیجه این میشه:Drawing the shape!اما این خروجی اون چیزی نیست که ما می خوایم و باید کلاس rectangle یه مستطیل بکشه! پس راه حل چیه؟ما باید متد Draw تو کلاس Shape را به صورت virtual تعریف کنیم و اون رو تو کلاس فرزند override می‌کنیم. یعنی:public virtual void Draw()&#xA;{&#xA;    Console.WriteLine(&#34;Drawing the shape!&#34;);&#xA;}حال همین تغییرات را درون کلاس‌های فرزند انجام می‌دهیم:public class Rectangle : Shape&#xA;{&#xA;    public override void Draw()&#xA;    {&#xA;        Console.WriteLine(&#34;Drawing rectangle!&#34;);&#xA;    }&#xA;}حال خروجی این میشه:Drawing rectangle!&#xA;و همچنین اگه از کلمه‌ی کلیدی base تو متد کلاس فرزند استفاده کنیم محتوا و متد کلاس پایه نمایش داده خواهد شد:public override void Draw()&#xA;{&#xA;    base.Draw();&#xA;}خب دوستان امیدوارم این مطلب هم مورد استفادتون باشهمخلصیم</description><category>اسحاق جباری</category><author>اسحاق جباری</author><pubDate>Sun, 09 Jan 2022 11:17:05 +0330</pubDate></item><item><title>برنامه نویسی Sync و Async</title><link>https://virgool.ir/@jabbari.eshaq/برنامه-نویسی-sync-و-async-wprwuzwczl7n</link><description>سلام دوستان تو این مقاله می خوام در مورد برنامه نویسی Sync و Async بحث کنم؛ این که چی هست و کجا باید از هر کدوم استفاده کرد....پس با من همراه باشببین دوست من مفهوم برنامه نویسی sync یعنی این که کد های برنامت هر چند تا باشه از خط 1 شروع میشه و خط به خط اجرا میشه تا به خط آخر برسه و اگه n تابع در برنامه وجود داشته باشه تا زمانی که تابع فعلی کامل نشه به سراغ تابع و به عبارتی توابع بعدی نمیرهتو یه مثال ساده تکه کدی  به زبان #C می‌نویسیم که یک ورودی از کاربر گرفته و آن را در صفحه نمایش چاپ کند:var input = Console.Readline();Console.WriteLine(input);در مثال بالا همه چیز با یک قاعده مشخص و خطی انجام می‌شود. کاربر یک ورودی وارد کرده و برنامه آن ورودی را چاپ می‌کند. حالا فرض کن برنامه ما قراره اطلاعاتی را دانلود کنه و بعد تغییراتی روی این داده‌ها اعمال کنه.خب؛ متوجه شدی عیب کار کجاس؟! درست حدس زدی! در واقع تا زمانی که دانلود فایل‌ها تموم نشده باشه برنامه نمی‌تونه تغییرات خودش را اعمال کنه. اگه روشی وجود داشت که برنامه با دانلود بخشی از فایل آن را پردازش هم بکنه خیلی خوب می شد! یا حتی بهتر، وقتی که برنامه در حال دانلود فایل‌ها هست، بتونیم توابع دیگه برنامه را اجرا کنیم! دقیقا به خاطر همین موارد و همین مزایاست که سراغ برنامه نویسی Async می‌رویم.برنامه نویسی Asynchronous (ناهمگام یا نامتقارن) یک مدل و مفهوم در برنامه نویسی است. در این مدل برخلاف روش Synchronous کدهای ما پشت سر هم اجرا نمی‌شوند و به اصطلاح ترتیب کدها غیرخطی است. حالا دیگر اجباری نیست که برنامه 400 خطی ما به ترتیب از خط 1 تا 400 اجرا شود و این روال می‌تواند تغییر کند. یا مثالی که درباره دانلود و پردازش فایل‌ها زدیم را هم می‌توانیم به کمک Asynchronous بهتر پیاده سازی کنیم. به این شکل که تا فایل‌ها در حال دانلود هستند، CPU را به بخش‌های دیگر اختصاص بدهیم. پس در Asynchronous ترتیب اجرای دستورات پشت سر هم نیست. اما چه دلیلی دارد که ترتیب اجرای کدها را در برنامه به هم بریزیم؟سی پی یو عضو حیاتی و مغز متفکر کامپیوتر به حساب میاد. اگه فرض مثال قطعاتی مثل کارت گرافیک، کارت صدای اکسترنال، خنک کننده‌ها یا دی وی دی رایتر نباشه میشه یه کاریش کرد اما اگه CPU نباشه کامپیوتر ما حتی روشنم نمی‌شه! حالا به نظرت منطقیه  که این عضو مهم را حتی برای یک لحظه هم بیکار بزاریم؟ به کمک روش برنامه نویسی Asynchronous می‌تونیم از منابع سخت افزاری نهایت استفاده را داشته باشیم.آیا مدل Asynchronous وابسته به یک زبان برنامه نویسی یا فریم ورک خاص است؟Asynchronous به تنهایی یک مفهوم است. بهتر است زمانی که در حال بررسی تئوریک آن هستیم وارد مباحث برنامه نویسی نشویم. زمانی که به خوبی این مدل را درک کردیم می‌توانیم هنگام کدنویسی از آن استفاده کنیم. زبان‌های برنامه نویسی روش‌های متنوعی برای پیاده کردن این مدل ارائه دادند که با توجه به زبانی که استفاده می‌کنیم ممکن است کمی متفاوت باشند. مثلا در زبان C# و بعد از تکنولوژی .NET Framework نسخه 4.5 به بعد دو کلیدواژه Async و Await معرفی شدند و کار پردازش نامتقارن داده‌ها را به عهده گرفتند. فراموش نکنید که عملیات Asynchronous محدود به دات نت فریم ورک و زبان برنامه نویسی سی شارپ نبوده و می‌توان از آن در بخش‌های مختلفی استفاده کرد.خب دوست من امیدوارم با این مقاله مفهوم sync و Async  رو فهمیده باشی</description><category>اسحاق جباری</category><author>اسحاق جباری</author><pubDate>Sun, 09 Jan 2022 10:49:41 +0330</pubDate></item><item><title>Dependency Injection در سی شارپ</title><link>https://virgool.ir/@jabbari.eshaq/dependency-injection-در-سی-شارپ-wmcpbmse2u23</link><description>سلام خدمت دوستان عزیز تو این پست می خوام در مورد مبحث dependency injection  در شیرین پر قدرت #C صحبت کنم؛ پس با من  همراه باشیدتزریق  وابستگی یا Dependency Injection یک پترن و الگوی طراحی است که هدف اصلی آن  حذف وابستگی‌ های موجود بین دو کلاس با استفاده از یک رابط (Interface)  است.در تزریق وابستگی ها دو اصطلاح داریم.loosely coupled: وجود کمترین وابستگی بین دو کلاسtight coupled: وجود بیشترین وابستگی بین دو کلاسبنابراین  باید برنامه و نرم‌افزار خود را طوری طراحی کنیم که تا حد ممکن استحکام  بین دو کلاس ضعیف باشد. چون زمانی که دو کلاس وابستگی بسیار دارند یا به  اصطلاح در هم چفت شده‌اند، انعطاف‌پذیری نرم‌افزار را به شدت پایین می‌آورند.خب حالا می خواهم با یک مثال جذاب داستان تزریق وابستگی در سی شارپ را برایتون  جا بندازم. فرض کنید می خواهیم یک بازی به نام نینجا بنویسیم که در آن  جنگجوهای شجاع، برای به دست آوردن شرافتشون، با دشمنان خود میجنگند اما قبل  از هر چیزی باید برای جنگجوهای خود یک سلاح مناسب تهیه کنیم. یک شمشیر که  نام آن را Sword می گذاریم و دست به کار می شویم: این کلاس یک متد hit  (ضربه زدن) دارد و هروقت آنرا فراخوانی کنیم، ضربه زده خواهد شد و target  یا همان هدفمان نصف میشود! خوب، این از سلاح.class Sword &#xA;{&#xA;    public void Hit(string target)&#xA;    {&#xA;        Console.WriteLine(&#34;Chopped {0} clean in half&#34;, target);&#xA;    }&#xA;}حالا  باید سامورایی بسازیم برای حمله به دشمن.  کلاس سامورایی ما باید یک متد  حمله یا Attack داشته باشد که وقتی آنرا فراخوانی می کنیم سامورایی با  شمشیرش، هدف را نصف کند.class Samurai&#xA;{&#xA;    readonly Sword sword;&#xA;    public Samurai() &#xA;    {&#xA;        this.sword = new Sword();&#xA;    }&#xA;&#xA;    public void Attack(string target)&#xA;    {&#xA;        this.sword.Hit(target);&#xA;    }&#xA;}حالا کافی است که سامورایی را ساخته و بجنگیم!class Program&#xA;{&#xA;    public static void Main() &#xA;    {&#xA;        var warrior = new Samurai();&#xA;        warrior.Attack(&#34;the evildoers&#34;);&#xA;    }&#xA;}در این  کد، ما با evildoers میجنگیم و او را با شمشیر نصف میکنیم. اما فرض کنید  بخواهیم سامورایی ما با سلاح دیگری به غیر از شمشیر بجنگد! مثلا با شوریکن  تیغه برنده شبیه ستاره. در این صورت باید کلاس سامورایی را کلا تغییر دهیم  چون در کلاس سامورایی فقط از کلاس شمشیر استفاده کرده ایم. پس هر بار که  نینجای ما بخواهد با یک سلاح جدید بجنگد، باید کلاس سامورایی را تغییر  دهیم. به این ترتیب Tightly Coupled رخ می دهد یعنی وابستگی کلاس سامورایی  به کلاس شمشیر.طبیعتا  ما این نوع وابستگی ها را دوست نداریم. چون مجبورمان میکند کدمان را تغییر  دهیم. برای از بین بردن این وابستگی ها، از interfaceها استفاده میکنیم.  بیایید یک interface به نام سلاح(weapon) بسازیم:interface IWeapon&#xA;{&#xA;    void Hit(string target);&#xA;}حالا کلاس شمشیر، را به این interface متصل میکنیم یا اصطلاحا آنرا Implement میکنیم:class Sword : IWeapon&#xA;{&#xA;    public void Hit(string target) &#xA;    {&#xA;        Console.WriteLine(&#34;Chopped {0} clean in half&#34;, target);&#xA;    }&#xA;}حالا سامورایی را طوری تغییر میدهیم که به جای یک شمشیر، از یک سلاح استفاده کند:class Samurai&#xA;{&#xA;    readonly IWeapon weapon;&#xA;    public Samurai() &#xA;    {&#xA;        this.weapon = new Sword();&#xA;    }&#xA;&#xA;    public void Attack(string target) &#xA;    {&#xA;        this.weapon.Hit(target);&#xA;    }&#xA;}حالا  سامورایی ما میتواند از سلاح های مختلفی استفاده کند. فقط یک جای کار  میلنگد. ما هنوز هم از شمشیر، در کلاس سامورایی استفاده می کنیم:this.weapon = new Sword();پس باید کلاس سامورایی را یک کمی بهتر کنیم. کافی است که سلاح مورد نظر را از طریق constructor به سامورایی بدهیم:class Samurai&#xA;{&#xA;    readonly IWeapon weapon;&#xA;    public Samurai(IWeapon weapon) &#xA;    {&#xA;        this.weapon = weapon;&#xA;    }&#xA;&#xA;    public void Attack(string target) &#xA;    {&#xA;        this.weapon.Hit(target);&#xA;    }&#xA;}حالا  کافی است که سلاح مورد نظرمان را از طریق constructor به سامورایی تزریق  کنیم. قبل از این، اجازه بدهید یک سلاح جدید به غیر از شمشیر هم بسازیم:class Shuriken : IWeapon&#xA;{&#xA;    public void Hit(string target)&#xA;    {&#xA;        Console.WriteLine(&#34;Pierced {0}&#39;s armor&#34;, target);&#xA;    }&#xA;}وقتشه تا یک ارتش سامورایی با سلاح های مختلف بسازیم و به evildoers حمله کنیم. حاضرید؟class Program&#xA;{&#xA;    public static void Main() &#xA;    {&#xA;        var warrior1 = new Samurai(new Shuriken());&#xA;        var warrior2 = new Samurai(new Sword());&#xA;        warrior1.Attack(&#34;the evildoers&#34;);&#xA;        warrior2.Attack(&#34;the evildoers&#34;);&#xA;    }&#xA;}&#xA;خب دوستان امیدوارم تونسته باشم این مفهوم مهم را براتون جا انداخته باشم.خوشحال میشم نظرات ارزشمندتون رو برام کامنت کنید و اگه دوست داشتید اینجا ازم حمایت کنیدخیلی مخلصیممنبع: درسمن</description><category>اسحاق جباری</category><author>اسحاق جباری</author><pubDate>Tue, 04 Jan 2022 15:43:59 +0330</pubDate></item><item><title>Singleton، Transient و Scoped</title><link>https://virgool.ir/@jabbari.eshaq/singleton-transient-و-scoped-vdrnfya5ogko</link><description>سلام دوستان امیدوارم حالتون خوب باشهتو این پست میخوام به ساده ترین شکل بگم فرق بین این سه نوع service lifetime چی هستن...پس با من همراه باشید:وقتی که یک سرویس رو داریم register میکنیم، باید نوع lifetime رو مشخص کنیم :اولیش Singleton هست؛ جناب Singleton میگه از سرویسی که ثبت کردی،یه نمونه همون اول برنامه و تنها یه بار من ثبت می کنم و هر جا لازم شد همون رو بر می گردونم، پس مصرف منابع مناسبی دارمدومیش جناب Transient هست؛ ایشون میگن که هر بار که در خواست دادی من از سرویس کی ثبت کردی یه نمونه جدید میسازم و بهت میدم، پس مموری و منابع بیشتری مصرف میکنم و میتونن روی پرفورمنس تاثیر بذارم.و آخریش هم دوستمون جناب Scoped هست، ایشون دقیقا مثلا Singleton عمل می کنه اما یه تفاوت داره، میگه اگه تو یه محدوده دیگه ای برنامه یه درخواست داده بشه من یه نمونه جدید میسازم و اون رو بهت میدمخب دوستان امیدوارم این مطلب براتون مفید باشه. اگه نظری دارید خوشحال میشم تو کامنت ها برام بنویسیدخیلی مخلصیم</description><category>اسحاق جباری</category><author>اسحاق جباری</author><pubDate>Tue, 04 Jan 2022 13:44:09 +0330</pubDate></item></channel></rss>