<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/posts/rss.xsl"?>
<rss version="2.0">
<channel>

<title>https://refi2026.lxb.ir</title>
<link>https://refi2026.lxb.ir</link>
<description>مرجع تخصصی زبان Csharp</description>
<language>fa-ir</language>
<generator>lxb.ir</generator>
<copyright>lxb.ir</copyright>


<item>
<title>آموزش سوکت نویسی به زبان csharp قسمت دوم</title>
<link>https://refi2026.lxb.ir/آموزش-سوکت-نویسی-به-زبان-csharp-قسمت-دوم</link>
<guid>https://refi2026.lxb.ir/آموزش-سوکت-نویسی-به-زبان-csharp-قسمت-دوم</guid>

<description><![CDATA[
در ادامه پست قبلی، سعی داریم تا یک سوکت از نوع کلاینت (مشتری) را در زبان برنامه نویسی سی شارپ ایجاد کنیم.
در پست قبلی، یک سوکت ساده از نوع سرور (خدمات دهنده) ایجاد کردیم که منتظر می ماند تا یک کلاینت به آن درخواست بزند، حال در این پست می خواهیم&nbsp; که یک سوکت از نوع کلاینت ایجاد کنیم و درخواستی به سرور بزنیم.
برخلاف سرور، کد نویسی سمت کلاینت ساده تر است، زیرا&nbsp; کافی است یک شی از سوکت ساخته بشود و در نهایت درخواست اتصال (connect) به IP و port سرور داده بشود.
            //ایجاد یک سوکت سمت کلاینت ساده
void simple_client() { //ایجاد یک سوکت سمت کلاینت ساده Socket client = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp); //ایجاد سوکت جدید به اسم دلخواه client.Connect("192.168.20.34", 8000); //درخواست اتصال به سرور }
&nbsp;
در این کد سوکت سرور ما در آدرس 192.168.20.34 قرار دارد و همچنین port اختصاصی (انتخاب آن کاملا سلیقه ای است) 8000 باعث ارسال درخواست به سمت سرور می شود.
✅پس از گذشت مدت زمان کوتاهی، اگر اتصال کلاینت به سرور برقرار نشود، یک خطا در سمت کلاینت قرار می گیرد که می بایست بعدا آن خطا را هندل کرد.]]></description>

<pubDate>Sun, 19 Jul 2026 17:41:17 +0330</pubDate>
</item>


<item>
<title>آموزش سوکت نویسی به زبان csharp قسمت اول</title>
<link>https://refi2026.lxb.ir/آموزش-سوکت-نویسی-به-زبان-csharp-قسمت-اول</link>
<guid>https://refi2026.lxb.ir/آموزش-سوکت-نویسی-به-زبان-csharp-قسمت-اول</guid>

<description><![CDATA[
در این پست قصد داریم تا آموزش صحیح برنامه نویسی سوکت را ارائه دهیم.
در این پست، بخش سرور مربوط به راه اندازی&nbsp; سوکت را ارائه و تقدیم خواهیم کرد.
در شبکه، همیشه یک سمت سرور (خدمات دهنده)، و در سمت دیگر نیز کلاینت (خدمات گیرنده یا مشتری)&nbsp; وجود دارد، سرور ها خدمات می دهند، و کلاینت ها خدمات می گیرند، پس هر چیزی که به اینترنت وصل می شود و به نحوی درحال تعامل با آن است، یک مشتری محسوب می شود و در طرف مقابل یک سرور است.
تمامی پیام رسان ها (واتساپ، اینستاگرام، سروش، ایتا و...)، تمامی وب سایت ها حتی ایمیل ها (مثل جیمیل و...) همه و همه دارای یک سمت خدمات دهنده یا Server هستند و تمامی افرادی که از این خدمات استفاده می کنند نیز به نحوی مشتری یا client در نظر گرفته می شوند.
در قسمت نیز برنامه ای ساده را خواهیم نوشت که نقش یک سرور را در یک شبکه (هم شبکه لن LAN و هم شبکه بزرگتری مثل اینترنت) ایفا می کند، و در پست بعدی نیز یک کلاینت را تعریف می کنیم.
برای شروع سوکت نویسی باید چند اصل را درنظر بگیریم:

وسعت برنامه&nbsp;

صرفا یک نرم افزار پیام رسان است
یک پیام رسان مشترک بین چند کاربر (نهایتا 10 نفر)
یک سیستم پیام رسان مربوط به یک اداره یا سازمان است
یک سیستم پیام رسان عمومی در بستر اینترنت ملی
یک سیستم پیام رسان جهانی در فضای اینترنت


زیرساخت مورد استفاده

شبکه داخلی لن&nbsp; (LAN) مابین چند سیستم محدود
شبکه داخلی سازمانی
شبکه&nbsp; ملی اینترانت
شبکه عمومی اینترنت&nbsp;



برنامه نویسی یک سرور ساده به زبان csharp
✅نکته به شدت مهم این است که فایروال به برنامه شما می بایست مجوز دسترسی به شبکه (Private و Public) را بدهد،&nbsp; در غیراینصورت برنامه شما نمی تواند به درستی کار کند.
//ایجاد یک سوکت سمت سرور ساده 
  void simple_server()
  {
      Socket server = new Socket(AddressFamily.InterNetwork , SocketType.Stream , ProtocolType.Tcp);
      //ایجاد سوکت جدید به اسم دلخواه
      IPEndPoint myIP = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8000);
      //اینکه سوکت روی چه آی پی منتظر کاربران باشد
      server.Bind(myIP);
      //بایند کردن سوکت روی آی پی و پورت مورد نظر
      server.Listen();
      //منتظر ماندن برنامه به جهت اتصال یک کاربر
      var client = server.Accept();
  }
در خط اول یک متغیر به اسم server ایجاد کردیم که از نوع socket است.
سپس یک سوکت جدید ساختیم و مقادیر مورد نظر را در آن وارد کردیم، این موارد مشخص می کند که سوکت ما چطور عمل کند،&nbsp; این موارد به ترتیب شامل درگاه اتصال (InterNetwork)، نوع سوکت (Stream) و پروتکل ارتباطی (Tcp) می باشد.
پس از تعریف&nbsp; سوکت، نوب Bind کردن است، برای بایند کردن نیاز داریم تا مشخص کنیم که سوکت از طریق چه مسیری بتواند با کلاینت ها ارتباط بگیرد، پس نیاز است مسیر EndPoint مشخص بشود که شامل یک IP و یک PORT است. ما برای اینکه سوکت بتواند تمامی به اصطلاح Interface ها را گوش بدهد (listen) از شناسه 0.0.0.0 استفاده کردیم و سپس پورت قراردادی در برنامه خودمان که در این مثال از 8000 استفاده شده است را معرفی کرده ایم. و در خط آخر نیز سوکت تعریف شده را فعال می کنیم تا منتظر درخواست هریک از کلاینت ها بماند.
در یک کلام، ما از طریق این چند خط به سیستم عامل اعلام می کنیم که اگر درخواستی با پروتکل tcp به سمت هرکدام از کارت های شبکه یا interface ها که آمد برنامه ما بتواند آن را بررسی کند.
بسیار عالی،&nbsp; اگر درخواستی به سمت سرور ما ارسال شود، در خط آخر که مهم ترین قسمت این کد است، درخواست به اصطلاح تایید می شود و اطلاعات کاربر جدید ما در متغیر client ذخیره می شود، حال می توانیم از طریق این متغیر (client) ارتباطات دیگری مانند ارسال/دریافت پیام و... را داشته باشیم.&nbsp;
✅این برنامه هم ناقص است، و هم از لحاظ پایداری کاملا ضعیف است، زیرا نیاز است تا حالت های مختلف ارتباطی، خطاهای ممکن و سایر مشکلات را در آن بررسی و مدیریت کنیم
✅در این کد هنوز هیچ اطلاعاتی رد و بدل نشده است و صرفا تااین مرحله فقط یک سوکت نوشته شده است که بدون هیچ ارسال/دریافت اطلاعاتی منتظر درخواست کاربران می ماند.
✅برنامه در خط server.Listen منتظر می ماند تا یک کلاینت درخواستی ارسال کند و سپس به خط بعد می رود.
با همراه باشید تا نسخه کلاینت را و تعریف های مورد نیاز را در پست بعدی&nbsp; بسازیم.]]></description>

<pubDate>Sun, 19 Jul 2026 17:04:42 +0330</pubDate>
</item>


<item>
<title>ساده ترین روش ایجاد لیست اعداد در سی شارپ</title>
<link>https://refi2026.lxb.ir/ساده-ترین-روش-ایجاد-لیست-اعداد-در-سی-شارپ</link>
<guid>https://refi2026.lxb.ir/ساده-ترین-روش-ایجاد-لیست-اعداد-در-سی-شارپ</guid>

<description><![CDATA[
در این پست قصد داریم تا ساده ترین روش تولید لیست اعداد در سی شارپ را به روش صحیح ایجاد کنیم.
هر زمان که مبحث مربوط به لیست اعداد به گوش هر برنامه نویسی برسد، معمولا به فکر ایجاد یک حلقه با استفاده از For یا while و یا استفاده از تابع می افتند.
این روش ها به طبع یکی از ساده ترین و کم خط ترین روش تولید لیست اعداد در زبان برنامه نویسی csharp می باشد،&nbsp; اما زمانیکه بخواهیم به فکر لیست اعدادی در حجم میلیون فکر کنیم، این روش ها به نحوی باعث ایجاد یک حجم فوق العاده ای داده درون حافظه می شود.
اما بهترین روش استفاده از&nbsp; &nbsp;Enumerable است، اما چرا؟

انعطاف پذیری در کدنویسی&nbsp;
قابلیت Lazy Evaluation

این قابلیت باعث می شود تا زمانیکه واقعا نیاز به داده نباشد، آن را تولید نکند
کاهش فوق العاده ای در مصرف حافظه
سرعت بالا


پشتیبانی از حلقه foreach
امنیت&nbsp;

&nbsp;با برگرداندن IEnumerable&lt;T&gt; به جای ساختارهای خاص (مانند List&lt;T&gt; یا Array)، پیاده&zwnj;سازی داخلی را پنهان می&zwnj;کنید


پشتیبانی از LINQ: 

به شما اجازه می&zwnj;دهد از عملگرهای قدرتمند LINQ مانند Where و Select برای فیلتر و تغییر داده&zwnj;ها استفاده کنید.&nbsp;



برای مثال:
اجرای این دستور باعث می شود تا شروع عدد از 100 می باشد و تا 900&nbsp; میلیون&nbsp; پیش می رود، و هربار عدد مقدار آن در یک کادر نمایش داده می شود.
در واقع اولین عدد 100 می باشد و آخرین عدد نیز &nbsp;900000099 می باشد.
        private void button1_Click(object sender, EventArgs e)
        {
            var i = Enumerable.Range(100, 900000000);
            var last = 0;
            foreach (var ir in i) 
            {
                last = ir;
            }
            MessageBox.Show($"Start:100 \n Last: {last}");
        }]]></description>

<pubDate>Fri, 17 Jul 2026 13:54:06 +0330</pubDate>
</item>


<item>
<title>پردازش همزمان موازی در سی شارپ بخش اول</title>
<link>https://refi2026.lxb.ir/پردازش-همزمان-موازی-در-سی-شارپ-بخش-اول</link>
<guid>https://refi2026.lxb.ir/پردازش-همزمان-موازی-در-سی-شارپ-بخش-اول</guid>

<description><![CDATA[
در این پست قصد داریم تا روش پردازش همزمان موازی با استفاده اسز Paraller را به روش صحیح توضیح دهیم.
با رشد پردازنده های چند هسته، یکی از نیاز های روزافزون برنامه نویسان، استفاده صحیح از قابلیت اجرای موازی می باشد، اجرای موازی برنامه ها به توسعه دهندگان حرفه ای کمک می کند تا بالاترین کارایی را از برنامه های خود به عرصه نمایش قرار دهند، در این بخش سعی داریم تا روش برنامه نویسی موازی&nbsp; را به صورت صحیح توضیح دهیم.
یکی از کلاس های پر استفاده کلاس Paraller می باشد که از طریق آن می توان با کالکشن ها اجراهای موازی ساخت.
فرض کنید قصد دارید تا یک مجموعه یا کالکشن 2 هزارتایی از درخواست هارا به یک سرور ارسال کنید،&nbsp; در پست های قبلی توضیح دادیم که بهترین گزینه برای ارسال درخواست ها روش همزمان می باشد، اما ارسال همزمان 2 هزار درخواست همزمان، سبب بروز مشکلات بسیار زیادی هم برای برنامه شما، هم سیستم شما، هم شبکه و هم سرور می شود، در واقع هندل کردن این تعداد کار بسیار سخت و پر ریسکی است، چه بسا این درخواست ها نیز بسیار مهم هم باشند.
در روش Paraller می توانیم با استفاده از دو loop یا حلقه (for و foreach) درخواست ها را هندل یا به نحوی مدیریت کنیم،&nbsp; می توانیم به جای ارسال همه 2 هزار درخواست که سبب بروز مشکلات بسیار زیادی نیز می شوند، درخواست ها را بسته به پهنای باند اینترنت مورد استفاده تنظیم کنیم،
به عنوان مثال با هربار چرخش حلقه ، 10 درخواست صف شود و صبر کند تا 10 درخواست بطور کامل و مدیریت شده ارسال و بدست سرور برسد، سپس 10 درخواست بعدی و به همین ترتیب 10 تا 10 تا درخواست ارسال شود تا مجوعا 2 هزار درخواست تکمیل شود.
از مزایای استفاده از&nbsp; این روش

ارسال خودکار
ایجاد صف به تعداد مورد نظر مثلا 10 تایی یا حتی بیشتر
مدیریت ارسال ها و اطمینان از ارسال درخواست ها
جلوگیری از تصادم و اصطلاحات Over flowing سیستم
جلوگیری از مسدود شدن توسط سرور
ارسال امن و ترتیبی درخواست ها
قابلیت جلوگیری از هنگ کردن سیستم
امکان مدیریت خطا&nbsp;
بهترین روش برای ارسال های بسیار زیاد

&nbsp;
نمونه کد و مثال ارائه خواهد شد.]]></description>

<pubDate>Thu, 16 Jul 2026 23:38:58 +0330</pubDate>
</item>


<item>
<title>اجرای همزمان و غیرهمزمان دستورات در سی شارپ csharp</title>
<link>https://refi2026.lxb.ir/اجرای-همزمان-و-غیرهمزمان-دستورات-در-سی-شارپ-csharp</link>
<guid>https://refi2026.lxb.ir/اجرای-همزمان-و-غیرهمزمان-دستورات-در-سی-شارپ-csharp</guid>

<description><![CDATA[
اجرای همزمان و غیرهمزمان دستورات در سی شارپ اهمیت بسیار زیادی دارند، زیرا گاهی نیاز است تا چند کار به صورت همزمان انجام بشود.
اجرای عملیات همزمان یعنی اینکه بتوانیم چندین کار را به صورت همزمان باهم اجرا کنیم. در سیستم اجرای دستورات بیشتر زبان های برنامه نویسی به طور معمول دستورات به صورت غیرهمزمان یا sync اجرا می شوند،&nbsp; برای مثال:
فرض کنید قرار است چند بسته پستی را به چند محل مختلف انتقال دهید:
📌در روش غیرهمزمان، بسته ها باید یکی یکی و پشت سرهم انتقال داده شوند، در واقع بسته های بعدی باید منتظر بمانند تا بسته های قبلی به محل مورد نظر خود رسیده باشند، این روش باعث اجرای کند فرآیند انتقال بسته ها می شود، در واقع&nbsp; زمان بسیار زیادی نیاز است تا کلیه بسته ها را بتوان ارسال کرد.
📌اما در روش همزمان، در این مثال ارسال بسته ها به صورت همزمان انجام می شود و درواقع سرعت عملکرد انتقال بسیار بالا می رود، با این حال برای انجام فرآیند ارسال همزمان یا async منابع به صورت مستقیم درگیر آن می شوند.
✅حالا که با مکانیزم فرآیند اجرای همزمان و غیرهمزمان آشنا شدیم، اجازه بدید تا یک مثال واقعی تر و در فضای برنامه نویسی بزنیم.
فرض می کنیم که قصد خواندن 5 فایل (متنی txt) را داریم:
📌در حالت sync یا غیرهمزمان بنا به حجم و طول فایل ها، زمان خواندن فایل متفاوت است و اگر تا خوانده نشدن کامل فایل قبلی، فایل بعد اجرا و خوانده نمی شوند، خوب اینکار در سیستم های رایانه ای که از منابع سخت افزاری ضعیفی بهره می برند کار بسیار منطقی است.
📌اما گاهی نیاز داریم تا هر 5 فایل را به صورت همزمان&nbsp; بخوانیم، در این حالت باید سراغ فرآیند async یا همزمان برویم، اما این روش با وجود تمام خوبی هایی که دارد، یک نقطه ضعف نیز دارد که آنهم مصرف بیش از حد منابع سخت افزاری از جمله Ram و Cpu می باشد.
برای مثال واقعی تر، قصد داریم تا تابع زیر را اجرا کنیم:
        void run()
        {
            for (int i = 0; i &lt; 500; i++)
            {
                listView1.Items.Add(i);
                Thread.Sleep(1000);
            }
        }
این تابع اگر به صورت کاملا عادی مانند زیر فراخوان شود:
        private void button1_Click(object sender, EventArgs e)
        {
            //sync
            run();
        }
چندحالت به وجود می آید:

اینکه فرم برنامه تا اتمام کار قفل می شود
تا زمانیکه حلقه به انتها نرسیده باشد، عملا هیچ دستور دیگری اجرا نمی شود.
امکان غیر فعال کردن حلقه، در زمان اجرا ممکن نیست
در حالت عادی هر شمارش 1 ثانیه زمان می برد و زمانیکه در 500 ضرب کنیم،&nbsp; زمانی معادل 500 ثانیه همه چیز قفل می شود
در واقع چیزی معادل 8 دقیقه و 30 ثانیه زمان می برد تا فراخوان تابع مورد نظر اتمام بشود.

اما در حالت همزمان یا Async مشکلی در 3 حالت قبل نداریم و عملا همه چیز به قدرت سیستم ما وابستگی خواهد داشت.

فرم قفل نمی شود
می توان چندین دستور دیگر را نیز اجرا کنیم
امکان خروج از حلقه و غیرفعال کردن فرآیند ممکن است&nbsp;
مدت زمان پایان بسته به منابع سخت افزاری ما است ولی دخالتی در اجرای سایر برنامه ها ندارد.

نمونه کد فراخوان همزمان:
        private void button2_Click(object sender, EventArgs e)
        {
            //async
            var t = new ThreadStart(run);
            var async = new Thread(t);
            async.Start();
            
        }
✅نکته من از var برای تعریف متغیر ها استفاده کردم که سرعت کار بالا تر برود
در این کد خط اول باعث می شود تا تابع مورد نظر را در یک نخ جدید (Thread) تعریف کنیم (در پرانتز تابع مورد نظر خود را وارد کنیم):&nbsp;
var t = new ThreadStart(run);
سپس در خط بعد یک نخ دیگر می سازیم که وظیفه آن هندل کردن و اجرای تابع تعریف شده&nbsp; در خط قبل می باشد.
✅به سادگی می توان حتی در حین اجرا بودن این فرآیند (نخ) آن را غیرفعال یا مجددا اجرا کنیم.
و در نهایت در خط آخر نخ مورد نظر را اجرا می کنیم:
async.Start();
&nbsp;
&nbsp;]]></description>

<pubDate>Thu, 16 Jul 2026 01:09:41 +0330</pubDate>
</item>


<item>
<title>ایجاد یک شی و کار با event رویداد ها در سی شارپ csharp بخش اول</title>
<link>https://refi2026.lxb.ir/ایجاد-یک-شی-و-کار-با-event-رویداد-ها-در-سی-شارپ-csharp-بخش-اول</link>
<guid>https://refi2026.lxb.ir/ایجاد-یک-شی-و-کار-با-event-رویداد-ها-در-سی-شارپ-csharp-بخش-اول</guid>

<description><![CDATA[
در این پست قصد داریم تا نحوه صحیح ایجاد یک شی از نوع Button را ارائه بدیم:
کارهایی که قراره انجام بشه:

ایجاد یک تابع برای فراخوان دستورات (ساخت شی)
صدا زدن تابع برای اجرای دستورات
تعریف یک شی از نوع کلید یا Button
تعریف رویداد یا Event برای کلید&nbsp;

برای مثال ایجاد رویداد Click روی این Button و نمایش پیغام



✅بخش های 1 و 2 و 3 مربوط به این پست است و بخش 4 مربوط به پست بعدی
درحال تکمیل

📌روش اول (روش&nbsp; معمول): در این روش ابتدا یک شی جدید از Button با یک اسم ایجاد می کنیم و از آن یک شی جدید می سازیم.
سپس برای هر Properties یک مقدار جدید تعریف می کنیم:
   void C_Button()
   {
       Button btn = new Button();      //ایجاد یک شی جدید
       btn.Size = new Size(150, 46);   //مشخص کردن اندازه کلید
       btn.Location = new Point(61, 61);// مشخص کردن موقعیت کلید       btn.name = "btn1";       btn.Text = "کلید سفارشی";
   }
✅ نکته: در&nbsp; این تابع فقط یک شی جدید از نوع Button ساخته شده، ولی&nbsp; هنوز مشخص نشده است که این کلید در کجای فرم، و روی کدام شی دیگر خلق بشود. حالا بریم سراغ روش دوم و روش صحیح تر.
📌روش دوم (روش تخصصی): در این روش حین ساخت شی جدید مقادیر مورد نظر Properties را تغییر&nbsp; می دهیم.
        void C_Button()
        {
            Button btn = new Button
            {
                Size = new Size(150, 46),
                Location = new Point(61, 61),
                Name = "btn1",
                Text = "کلید سفارشی"
            };      

        }
همنطور که مشخص است،&nbsp; تفاوت های جزئی بین دو کد وجود دارد که روش دوم یک روش استاندارد و بروزشده می باشد.
حال بریم سراغ خلق کلید ساخته شده جدید بر روی فرم. در واقع باید در انتها خط مشخص کنیم که این شی دقیقا در کجا می بایست خلق بشود.
     public Form1()
     {
         InitializeComponent();
         C_Button(); //فراخوان تابع برای ساخت یک کلید
     }

     void C_Button() //تابع مربوط به ایجاد و خلق کلید
     {
         Button btn = new Button
         {
             Size = new Size(150, 46),
             Location = new Point(61, 61),
             Name = "btn1",
             Text = "کلید سفارشی"
         };      
         this.Controls.Add(btn);

     }
نتیجه نهایی اجرای این فرمان:

&nbsp;
ادامه در بخش دوم
&nbsp;
&nbsp;]]></description>

<pubDate>Wed, 15 Jul 2026 18:59:37 +0330</pubDate>
</item>


<item>
<title>ایجاد یک شی و کار با event رویداد ها در سی شارپ csharp بخش دوم</title>
<link>https://refi2026.lxb.ir/ایجاد-یک-شی-و-کار-با-event-رویداد-ها-در-سی-شارپ-csharp-بخش-دوم</link>
<guid>https://refi2026.lxb.ir/ایجاد-یک-شی-و-کار-با-event-رویداد-ها-در-سی-شارپ-csharp-بخش-دوم</guid>

<description><![CDATA[
در این پست قصد داریم تا نحوه صحیح ایجاد یک شی از نوع Button را ارائه بدیم:
در پست قبلی موارد 1 و&nbsp; 2 و 3 را تکمیل کردیم و حال رسیدیم به مبحث 4 که مربوط به ایجاد رویداد است.
کارهایی که قراره انجام بشه:

ایجاد یک تابع برای فراخوان دستورات (ساخت شی)
صدا زدن تابع برای اجرای دستورات
تعریف یک شی از نوع کلید یا Button
تعریف رویداد یا Event برای کلید&nbsp;

برای مثال ایجاد رویداد Click روی این Button و نمایش پیغام



در پست قبلی ابتدا یک تابع ساختیم و درون آن یک شی جدید را همراه با تعریف Properties&nbsp; ها ایجاد کردیم، حال بریم سراغ روش های تعریف رویداد های مختلف:
📌روش اول (روش سنتی و معمول):
void C_Button()
{
    Button btn = new Button
    {
        Size = new Size(150, 46),
        Location = new Point(61, 61),
        Name = "btn1",
        Text = "کلید سفارشی"
    };      
    this.Controls.Add(btn);

    btn.Click += Btn_Click; // این خط کد مربوط به تعریف رویداد کلیک است و به تابع پایین اشاره می کند
}
private void Btn_Click(object? sender, EventArgs e)
{
    MessageBox.Show("کلید زده شد.");
}
در این روش نام شی (btn) همراه با رویداد Click تعریف می شود سپس از += و در انتها اشاره به تابعی دارد که می تواند این رویداد را هندل کند. در تابع مورد نظر که هم می توان آن را جدید ساخت و یا اشاره به یک تابع از قبل تعریف شده نماید.
&nbsp;
📌روش دوم:
در این روش که یک روش صحیح و البته بروزی نیز می باشد، دیگر نیازی به تعریف تابع نیست و دستور مورد نظر&nbsp; برای هر رویداد مستقیما تعریف می شود.
    void C_Button() //تابع مربوط به ایجاد و خلق کلید
    {
        Button btn = new Button
        {
            Size = new Size(150, 46),
            Location = new Point(61, 61),
            Name = "btn1",
            Text = "کلید سفارشی"
        };      
        this.Controls.Add(btn);

        //تعریف هندل رویداد کلیک
        btn.Click += (sender, e) =&gt; 
        { 
            MessageBox.Show("دکمه کلیک شد!"); 
        };
    }
در این روش که&nbsp; به صورت لامبدا تعریف شده است، مستقیما رویداد و نحوه هندل کردن آن درون همان تابع تعریف می شود.

مشاهده نتیجه:
&nbsp;]]></description>

<pubDate>Wed, 15 Jul 2026 18:59:06 +0330</pubDate>
</item>


<item>
<title>مرجع تخصصی برنامه نویسی csharp</title>
<link>https://refi2026.lxb.ir/مرجع-تخصصی-برنامه-نویسی-csharp</link>
<guid>https://refi2026.lxb.ir/مرجع-تخصصی-برنامه-نویسی-csharp</guid>

<description><![CDATA[

بسم الله الرحمن الرحیم
اللهم عجل لولیک الفرج
این وبلاگ مربوط به دست نوشته ها و ثبت تجربیات مهندس نرم افزاری است که علاقه مند به ارائه تجربیات و تخصص کسب شده خود به دیگران است.
این وبلاگ مرجع تخصصی زبان برنامه نویسی C# خواهد شد.]]></description>

<pubDate>Wed, 15 Jul 2026 15:12:36 +0330</pubDate>
</item>


<item>
<title>جزوه برنامه نویسی شبکه socket به زبان csharp</title>
<link>https://refi2026.lxb.ir/جزوه-برنامه-نویسی-شبکه-socket-به-زبان-csharp</link>
<guid>https://refi2026.lxb.ir/جزوه-برنامه-نویسی-شبکه-socket-به-زبان-csharp</guid>

<description><![CDATA[

درحال نگارش جزوه برنامه نویسی شبکه (socket programming) به زبان برنامه نویسی c# هستیم. این آموزش کاملا به زبان ساده و با استفاده از مفهومی ترین&nbsp; کلمات درحال نگارش می باشد.
ان شاالله به محض تکمیل در این پست تقدیم خواهد شد.
&nbsp;]]></description>

<pubDate>Wed, 15 Jul 2026 15:10:44 +0330</pubDate>
</item>


<item>
<title>انتخاب یک عدد تصادفی در csharp</title>
<link>https://refi2026.lxb.ir/انتخاب-یک-عدد-تصادفی</link>
<guid>https://refi2026.lxb.ir/انتخاب-یک-عدد-تصادفی</guid>

<description><![CDATA[
استفاده از تابع random برای انتخاب یک عدد تصادفی در زبان برنامه نویسی سی شارپ&nbsp;
در ابتدا یک شی&nbsp; از نوع Random به اسم rnd (در ابتدای برنامه و بیرون از هرتابعی) می سازیم تا بتوانیم هرکجای برنامه از آن استفاده نماییم.
Random rnd;
سپس می بایست یک شی جدید از نوع Random ایجاد کنیم. در واقع در هر رویدادی از برنامه (مثلا رویداد Load یا ...) باشد را&nbsp; قرار می دهیم.
rnd = new Random();
تا اینجای کار یک متغیر به نام rnd ایجاد شده است، که از کلاس Random اثر بری کرده است.
حالا&nbsp; وقت آن رسیده است که در هر تابعی که مد نظر ما است، از آن استفاده کنیم.
برای مثال من یک بازی تاس ساختم که بتونم از طریق اون هر بار یک عدد تصادفی بین 1 تا 6 انتخاب کنم. و در نهایت آن عدد را در button1 نمایش دهیم.
public partial class Form1 : Form
{
    Random rnd;
    public Form1()
    {
        InitializeComponent();
        rnd = new Random();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        var r = rnd.Next(1, 7);
        button1.Text = r.ToString();
    }}
وبلاگ تخصصی زبان برنامه نویسی سی شارپ]]></description>

<pubDate>Wed, 15 Jul 2026 14:11:20 +0330</pubDate>
</item>


</channel>
</rss>

