آموزش C# و .Net
1.56K subscribers
465 photos
329 videos
19 files
2.88K links
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk

آیدی ادمین:
@ma_limbs
Download Telegram
‏ویژگی `readonly record struct` در C# 10 معرفی شد.
‏با این قابلیت، نوعی struct تعریف می‌کنید که:

‏* مانند `record`ها immutable است (تغییرناپذیر).
‏* مانند `struct`ها value type است (نوع مقداری).

‏این ترکیب، برای ساختارهای داده‌ای کوچک و غیرقابل تغییر، عملکرد و ایمنی را بهینه می‌کند.
‏به این ترتیب از تخصیص حافظه heap جلوگیری می‌شود.
🧱🚀

https://t.me/csharp7
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مبانی پایگاه داده رابطه‌ای

نکته 1:
‏SQLite یه نسخه کوچیک و سبک از پایگاه داده‌های رابطه‌ایه؛ یعنی بدون سرویس جداگونه هم کار می‌کنه و راحت همه‌جا میاد بالا 😄

نکته 2:
‏تو SQLite لازم نیست از قبل سرور نصب کنی؛ فقط فایل دیتابیسه و همین باعث می‌شه خیلی سریع پروژه‌تو راه بندازی 🔥

نکته 3:
‏ساختار جدول‌ها در SQLite تماما رابطه‌ایه، پس با همون مفاهیم کلاسیک مثل سطر، ستون، Primary Key سروکار داری 💡📊

نکته 4:
‏برای پروژه‌های موبایل عالیه چون هم کم‌حجمه و هم خیلی سریع کار می‌کنه 📱

نکته 5:
‏SQLite امکان استفاده از JOIN رو می‌ده پس می‌تونی چندتا جدول رو به‌صورت حرفه‌ای به هم وصل کنی 🔗💥

نکته 6:
‏فقط یه فایل دیتابیس ذخیره می‌شه؛ یعنی خیلی راحت می‌تونی بک‌آپ بگیری یا جا‌به‌جاش کنی 🎒📁

نکته 7:
‏به خاطر رابطه‌ای بودنش می‌تونی داده‌هارو نرمال‌سازی کنی و از تکرار جلوگیری کنی 📐

نکته 8:
‏SQLite تراکنش‌ها رو پشتیبانی می‌کنه؛ یعنی عملیاتت یا کامل انجام می‌شن یا کامل لغو می‌شن 🔒✔️

نکته 9:
‏برای پروژه‌های کوچک و متوسط واقعا بهترین انتخابه و حتی تو برنامه‌های بزرگ هم برای کش و ذخیره موقت فوق‌العاده‌ست 💡🔥

نکته 10:
‏با وجود سبک بودن، انواع داده‌ها و محدودیت‌ها (Constraints) رو خوب پشتیبانی می‌کنه؛ پس مدل‌سازی دیتابیس همچنان اصولی می‌مونه 🧩


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
‏در C#‎، برای پردازش جریانی داده‌های نامتقارن (Asynchronous)، `IAsyncEnumerable` الگوهای بهینه‌تری ارائه می‌دهد.

‏به جای لیست کردن تمام آیتم‌ها در حافظه، می‌توانید آیتم‌ها را به صورت تک‌به‌تک و در حین پردازش دریافت کنید.

‏این روش، مصرف حافظه را به شدت کاهش می‌دهد، به‌ویژه زمانی که با مجموعه‌های داده بزرگ سروکار دارید. 💾

‏مثال: خواندن لاین به لاین یک فایل بزرگ. 📚

https://t.me/csharp7
‏ویژگی Init-only setters در C# به شما اجازه می‌دهند مقدار یک property را فقط در زمان ساخت object تعیین کنید.

```csharp
public string Name { get; init; }
```

‏با records در C#، می‌توانید immutable data classes تعریف کنید. یعنی پس از ایجاد، مقدار propertyها قابل تغییر نیست.

```csharp
public record Person(string FirstName, string LastName);
```

‏ترکیب این دو، راهی قدرتمند برای ایجاد اشیایی با مقادیر اولیه مشخص و غیرقابل تغییر ارائه می‌دهد. 🔒💻

https://t.me/csharp7
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...

عضو لیست جامع شوید:

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏در C#، متدهای استاتیک فقط می‌توانند به فیلدها و متدهای استاتیک دیگر در همان کلاس دسترسی داشته باشند. این به این دلیل است که متدهای استاتیک به یک نمونه خاص از کلاس تعلق ندارند، بلکه به خود کلاس تعلق دارند.

‏هنگام دسترسی به اعضای استاتیک از داخل یک متد استاتیک، نیازی به ایجاد یک نمونه از کلاس نیست. شما مستقیماً با استفاده از نام کلاس به آن‌ها دسترسی پیدا می‌کنید.

‏مثال:

‏فرض کنید کلاسی به نام Calculator داریم با یک فیلد استاتیک و یک متد استاتیک:

public class Calculator
{
‏ public static int AdditionCount = 0; // فیلد استاتیک

‏ public static int Add(int a, int b) // متد استاتیک
{
‏ AdditionCount++; // دسترسی به فیلد استاتیک
return a + b;
}

‏ // متد استاتیک دیگری که به فیلد و متد استاتیک دیگر دسترسی دارد
public static void DisplayAdditionCount()
{
‏ Console.WriteLine($"تعداد دفعات استفاده از تابع Add: {AdditionCount}"); // دسترسی به فیلد استاتیک
‏ int result = Add(5, 3); // دسترسی به متد استاتیک
‏ Console.WriteLine($"نتیجه یک نمونه Add: {result}");
}
}


‏در متد DisplayAdditionCount که خود یک متد استاتیک است، ما به طور مستقیم به فیلد استاتیک AdditionCount و متد استاتیک Add دسترسی پیدا کرده‌ایم.

‏برای فراخوانی DisplayAdditionCount، کافیست از نام کلاس استفاده کنیم:

Calculator.DisplayAdditionCount();


‏این نحوه دسترسی به اعضای استاتیک از داخل متدهای استاتیک را نشان می‌دهد. 🧰⚙️

https://t.me/csharp7
‏در C#‎، سازنده‌های partial به شما اجازه می‌دهند منطق یک سازنده را بین چند فایل class تقسیم کنید. 🏗️ این قابلیت، به‌ویژه در پروژه‌های بزرگ که کد تولیدشده و کد دستی با هم ترکیب می‌شوند، مفید است. 🧩 هر بخش باید `partial` باشد.

https://t.me/csharp7
‏پروژه‌های #Csharp ⚙️ بزرگ معمولاً فایل‌های پیکربندی زیادی دارن.

‏AdditionalTexts و AnalyzerConfig به شما کمک می‌کنن این فایل‌ها رو مدیریت کنین.

‏AdditionalTexts برای فایل‌هایی مثل SQL script یا JSON schema استفاده میشه که بخشی از کامپایل نیستن ولی ممکنه برای تولید کد یا آنالیز استاتیک بهشون نیاز باشه.

‏AnalyzerConfig هم تنظیمات مربوط به آنالیز کد رو مشخص می‌کنه. مثلاً سطح سخت‌گیری ruleهای کدنویسی 🚦 یا فعال/غیرفعال کردن بعضی از Analyzerها.

https://t.me/csharp7
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏معرفی LEFT JOIN (یا LEFT OUTER JOIN)

‏LEFT JOIN مثل اینه که بگی: "هرچی تو جدول سمت چپم (جدول اصلی) هست رو کامل بیار، حتی اگه تو جدول سمت راست چیزی براش پیدا نکردی! 🤔"

‏یادت باشه، اگه LEFT JOIN استفاده کنی و برای یه ردیف از جدول چپ، تو جدول راست چیزی نباشه، جای ستون‌های جدول راست برات NULL میذاره. 🧐 این خیلی مهمه!

‏میخوای ببینی کدوم کاربرات سفارشی ثبت نکردن؟ 🤷‍♀️ کافیه LEFT JOIN بزنی بین جدول کاربران و سفارشاتت، بعد فیلتر کنی جایی که order_id تو جدول سفارشات IS NULL باشه! این یه ترفند خفنه! 🔥

‏فرق اصلی LEFT JOIN با INNER JOIN رو حواست باشه! INNER فقط اونایی رو میاره که تو جفت جدول تطابق دارن، ولی LEFT، همه سمت چپی‌ها رو میاره، حتی اگه سمت راستی‌ها بی‌معنی باشن (یعنی NULL). 💡

‏ترتیب جدول‌ها تو LEFT JOIN خیلی مهمه! ☝️ A LEFT JOIN B با B LEFT JOIN A فرق داره و نتیجه‌های متفاوتی میده. دقت کن کدوم جدول برات "اصلی" و سمت چپه.

‏LEFT JOIN همون LEFT OUTER JOIN هست، فقط برای راحتی کلمه "OUTER" رو معمولاً حذف می‌کنن. پس نگران نباش اگه هردوشو دیدی، یکین!

‏موقعی که میخوای اطلاعات تکمیلی رو از یه جدول دیگه به داده‌های اصلیت اضافه کنی، ولی دوست نداری هیچکدوم از داده‌های اصلیت از بین برن، LEFT JOIN بهترین انتخابه! 🚀

‏حواست باشه اگه قراره روی ستون‌های جدول سمت راست فیلتر کنی، ممکنه نتیجه شبیه INNER JOIN بشه! اگه فیلترت رو توی ON بذاری، رفتار LEFT JOIN حفظ میشه. این یه دام رایجه! 🎣

‏می‌تونی چند تا LEFT JOIN رو پشت سر هم استفاده کنی! مثلاً users LEFT JOIN orders LEFT JOIN products. اینجوری اطلاعات زیادی رو میتونی به هم وصل کنی. 🕸️

‏فکر کن به یه کلاس درس که دانشجوهاش شماره دانشجویی دارن و یه جدول دیگه که نمراتشونه. اگه بخوای لیست کامل دانشجوها رو با نمراتشون ببینی (حتی اونایی که هنوز نمره نگرفتن)، LEFT JOIN ناجیته! 🎓📚


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏استفاده از enum برای تعریف مجموعه‌ای از ثابت‌ها

🟢 سوال :

‏کدام یک از موارد زیر یک کاربرد پیشرفته enum است؟

گزینه ۱:
‏مدیریت حافظه

گزینه ۲:
‏استفاده در الگوهای طراحی state machine یا flagها

گزینه ۳:
‏محاسبات ریاضی ساده

گزینه ۴:
‏ایجاد رابط کاربری استاتیک

🔵 گزینه صحیح: 2

🟢 توضیح :

‏الگوهای طراحی state machine یا flagها مثال‌هایی از کاربرد پیشرفته enum هستند.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...

عضو لیست جامع شوید:

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏مفهوم Pattern Matching در C#

🟢 سوال :

‏کدام یک از موارد زیر یک کاربرد پیشرفته Pattern Matching است؟

گزینه ۱:
‏مدیریت حافظه

گزینه ۲:
‏ایجاد الگوهای طراحی تابعی با استفاده از تطبیق الگوها

گزینه ۳:
‏محاسبات ریاضی ساده

گزینه ۴:
‏ایجاد رابط کاربری استاتیک

🔵 گزینه صحیح: 2

🟢 توضیح :

‏ایجاد الگوهای طراحی تابعی با استفاده از تطبیق الگوها، یک کاربرد پیشرفته Pattern Matching است.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
‏C# 14 قابلیتی به نام Webcil format معرفی کرد. 📦

‏با این فرمت، اسمبلی‌های دات‌نت برای وب بهینه می‌شن و حجم کمتری دارن. 🚀

‏نتیجه؟ سرعت بارگذاری و اجرای برنامه‌های Blazor WebAssembly بیشتر میشه.

https://t.me/csharp7
‏پایتون بلدی؟ 🐍 یه سوال! 🧐

‏Threading سریعتره یا Multiprocessing یا Asyncio؟ 🤔

‏هر کدوم یه جور موازی‌کاریه! Threading برای کارهای IO-bound (مثل دانلود) خوبه، Multiprocessing برای CPU-bound (محاسبات سنگین) و Asyncio هم برای کارهای همزمانِ سبک.

‏انتخاب با تو! 😉
#پایتون #آموزش #programming

https://t.me/python7ir
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

شامل موضوعات آموزشی زیر:

توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی

با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
‏ویژگی `MethodImplOptions.NoInlining` از قرارگیری یک متد در کنار متد فراخوان جلوگیری می‌کند. این یعنی متد همیشه به صورت یک فراخوانی جداگانه اجرا می‌شود.

‏از طرفی، `MethodImplOptions.AggressiveInlining` به کامپایلر پیشنهاد می‌کند تا حد امکان، متد را درون متد فراخوان قرار دهد. این کار سرعت را بالا می‌برد اما اندازه کد را افزایش می‌دهد. 🚀

‏انتخاب بین این دو، بستگی به نیازهای خاص پروژه دارد. ⚖️

https://t.me/csharp7
‏هنگام کار با فایل‌ها در C#، ممکن است با خطاهایی مانند عدم دسترسی به فایل، فایل پیدا نشده یا مشکلات دیگر در عملیات ورودی/خروجی (I/O) مواجه شوید. برای مدیریت این استثناها و جلوگیری از توقف ناگهانی برنامه، استفاده از بلوک try-catch ضروری است.

using System;
using System.IO;

public class FileOperations
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";

try
{
‏ // تلاش برای خواندن از فایل
using (StreamReader reader = new StreamReader(filePath))
{
string content = reader.ReadToEnd();
‏ Console.WriteLine("محتوای فایل:");
Console.WriteLine(content);
}

‏ // مثال: تلاش برای نوشتن در فایل (که ممکن است مجاز نباشد)
‏ using (StreamWriter writer = new StreamWriter(filePath, true)) // true برای اضافه کردن به انتهای فایل
{
‏ writer.WriteLine("این یک خط جدید است.");
}
‏ Console.WriteLine("عملیات نوشتن با موفقیت انجام شد.");
}
catch (FileNotFoundException)
{
‏ Console.WriteLine($"خطا: فایل '{filePath}' پیدا نشد.");
}
catch (UnauthorizedAccessException)
{
‏ Console.WriteLine($"خطا: دسترسی به فایل '{filePath}' مجاز نیست.");
}
catch (IOException ex)
{
‏ Console.WriteLine($"خطای ورودی/خروجی رخ داد: {ex.Message}");
}
‏ catch (Exception ex) // برای گرفتن هر نوع خطای دیگر
{
‏ Console.WriteLine($"یک خطای غیرمنتظره رخ داد: {ex.Message}");
}
finally
{
‏ Console.WriteLine("عملیات مربوط به فایل به پایان رسید.");
}
}
}


‏در این مثال:
‏- بلوک try شامل کدهایی است که ممکن است استثنا ایجاد کنند (مانند خواندن یا نوشتن در فایل).
‏- بلوک‌های catch انواع مختلف استثناها را مدیریت می‌کنند. FileNotFoundException برای زمانی که فایل وجود ندارد، UnauthorizedAccessException برای مشکلات دسترسی، و IOException برای سایر خطاهای I/O.
‏- بلوک finally همیشه اجرا می‌شود، چه استثنایی رخ دهد و چه رخ ندهد، و برای آزاد کردن منابع (مانند بستن فایل‌ها) بسیار مفید است. استفاده از using در StreamReader و StreamWriter به طور خودکار منابع را مدیریت می‌کند، اما finally همچنان برای پیام نهایی مفید است. 📄🔒

https://t.me/csharp7
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏ValueStringBuilder راهی برای ساخت رشته‌ها با کارایی بالاست. 🚀

‏به جای String از ValueStringBuilder استفاده کنین تا تخصیص حافظه کمتری داشته باشین. اینطوری Garbage Collector کمتر درگیر میشه و سرعت بالاتر میره. ⏱️

‏این ساختار (struct) تو namespace `System.Text` قرار داره و برای سناریوهایی که performance خیلی مهمه، عالیه. 👌

https://t.me/csharp7
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

شامل موضوعات آموزشی زیر:

توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی

با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
‏Crossgen2 یک گام جلوتر از RyuJIT! 🚀

‏کامپایلر Crossgen2، با کامپایل ahead-of-time (AOT)، سرعت بارگذاری و اجرای برنامه‌های #C رو به طور چشمگیری افزایش میده. در مقابل، RyuJIT در زمان اجرا (JIT) کامپایل میکنه.

‏Crossgen2 برای برنامه‌هایی که استارت‌آپ سریع براشون حیاتیه، مثل اپلیکیشن‌های دسکتاپ، یه انتخاب عالیه. اما RyuJIT همچنان برای سناریوهایی که نیاز به بهینه‌سازی‌های پویا دارن، مناسبه. 💡

‏انتخاب با شماست! ⚙️

https://t.me/csharp7