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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در C#، مقداردهی اولیه اشیاء (Object Initializer) و سازنده‌ها (Constructor) هر دو برای ایجاد و تنظیم اشیاء استفاده می‌شوند، اما تفاوت کلیدی در این است که مقداردهی اولیه اشیاء، بعد از فراخوانی سازنده پیش‌فرض (یا سازنده‌ای که شما مشخص می‌کنید) انجام می‌شود و مقادیر اعضای شیء را تنظیم می‌کند. در حالی که سازنده، منطق اصلی ایجاد شیء و مقداردهی اولیه اجباری را بر عهده دارد.

‏به عبارت دیگر، سازنده برای ایجاد شیء ضروری است، اما مقداردهی اولیه اشیاء اختیاری بوده و برای تنظیم راحت‌تر مقادیر بعد از ساخت شیء استفاده می‌شود. 💡

‏مثال:
```csharp
Person p = new Person() { Name = "Ali", Age = 30 };
```
👨‍💻

https://t.me/csharp7
‏SortedDictionary در C#

SortedDictionary<TKey, TValue> یک مجموعه کلید-مقدار است که به طور خودکار کلیدها را مرتب نگه می‌دارد. این ویژگی باعث می‌شود بازیابی داده‌ها بر اساس ترتیب کلیدها بسیار کارآمد باشد.

‏تاثیر مرتب‌سازی بر عملکرد:

جستجو و بازیابی: به دلیل مرتب بودن کلیدها، عملیات جستجو (مانند `ContainsKey` یا دسترسی به مقدار با استفاده از کلید) در `SortedDictionary` سریع‌تر از `Dictionary` (که کلیدها مرتب نیستند) است، به خصوص در مجموعه های بزرگ. این زمان جستجو به طور معمول O(log n) است.
اضافه کردن و حذف: اضافه کردن و حذف عناصر در SortedDictionary نیز با توجه به نیاز به حفظ ترتیب، کمی کندتر از Dictionary است و زمان آن نیز O(log n) می‌باشد.

‏در مقابل، Dictionary در اضافه کردن و حذف سریع‌تر عمل می‌کند (O(1) به طور متوسط)، اما جستجو در آن کندتر است (O(n) در بدترین حالت).

‏بنابراین، انتخاب بین SortedDictionary و Dictionary بستگی به اولویت شما در عملیات دارد: اگر مرتب بودن کلیدها و جستجوهای سریع بر اساس آن اولویت دارد، SortedDictionary گزینه مناسبی است. 📚
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏نصب و پیکربندی محیط Visual Studio برای C#

🟢 سوال :

‏کدام یک از موارد زیر برای پیکربندی تنظیمات Visual Studio برای C# استفاده می‌شود؟

گزینه ۱:
Command Prompt

گزینه ۲:
PowerShell

گزینه ۳:
Options menu

گزینه ۴:
Task Manager

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

🟢 توضیح :

‏Options menu برای پیکربندی تنظیمات Visual Studio برای C# استفاده می‌شود.

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

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

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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏C#‎ دو روش برای مدیریت null داره:

‏Null-forgiving operator (!): وقتی مطمئنید یک متغیر nullable، null نیست، از این علامت استفاده می‌کنید. با این کار، کامپایلر دیگه هشدار null نمی‌ده. ⚠️

‏Null-conditional operator (?): اگه متغیر null باشه، دیگه ادامه عملیات اجرا نمیشه و null برمی‌گردونه. از NullReferenceException جلوگیری می‌کنه.

‏انتخاب با شماست، بسته به شرایط! 😉

https://t.me/csharp7
📢 رویدادهای دامنه رو شنیدی؟ 🤔

‏با MassTransit چطور میشه مدیریتشون کرد؟ 🚀

‏یه آموزش کوتاه و کاربردی براتون آماده کردیم.

‏یاد میگیریم چطور رویدادها رو Publish کنیم و با MassTransit هندلشون کنیم.

‏دیگه نگران بهم ریختگی کد نباشید! 😉

🔗 [لینک به آموزش]
#dotnet #masstransit #domainevents

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

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏C# 11 به شما امکان میده الگوهای `List` رو مستقیماً داخل الگوهای `switch` استفاده کنید.
```csharp
string GetSequenceType(int[] sequence) => sequence switch {
[1, 2, 3] => "The sequence 1, 2, 3",
[_, _, 4] => "Sequence ending with 4",
[.., 5] => "Sequence containing 5",
[>=0, ..] => "Sequence with non-negative start",
_ => "Other sequence",
};
```

‏همچنین میتونید از `slice patterns` برای بررسی بخش‌هایی از آرایه‌ها استفاده کنید.

```csharp
int[] numbers = { 1, 2, 3, 4, 5 };
var slice = numbers[2..4]; // slice is {3, 4}
```

‏این الگوها، خوانایی و قدرت الگوها در سی‌شارپ رو افزایش میدن. ⚙️💻

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

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

نکته 1:
‏SpatiaLite یک پسوند فضایی (Spatial Extension) برای SQLite است که به صورت یک کتابخانه الحاقی (Loadable Extension) پیاده‌سازی شده و باید به طور جداگانه کامپایل و نصب گردد.

نکته 2:
‏برای بهره‌برداری از قابلیت‌های GIS، هسته SQLite نیازمند بارگذاری دینامیکی (Dynamic Loading) کتابخانه SpatiaLite است که معمولاً به صورت یک فایل .dll یا .so ارائه می‌شود.

نکته 3:
‏نصب SpatiaLite به دلیل وابستگی به چندین کتابخانه جغرافیایی دیگر، نظیر GEOS و PROJ.4، ممکن است نیازمند نصب پیش‌نیازهای متعددی باشد.

نکته 4:
‏در محیط خط فرمان SQLite، بارگذاری افزونه پس از اتصال به پایگاه داده با استفاده از فرمان .load /path/to/mod_spatialite انجام می‌گیرد.

نکته 5:
‏در برنامه‌نویسی، توابع API مربوط به SQLite، مانند sqlite3loadextension، برای بارگذاری برنامه‌نویسی شده و دینامیکی کتابخانه SpatiaLite به داخل موتور پایگاه داده استفاده می‌شود.

نکته 6:
‏پس از بارگذاری موفقیت‌آمیز کتابخانه، نیاز به اجرای دستورات SQL خاصی نظیر SELECT InitSpatialMetaData() است تا جداول سیستمی لازم برای مدیریت فراداده‌های فضایی (Spatial Metadata) ایجاد شوند.

نکته 7:
‏نصب و راه‌اندازی SpatiaLite در سیستم‌عامل‌های مبتنی بر لینوکس غالباً از طریق مدیریت بسته (Package Manager) سیستم انجام می‌شود که وابستگی‌ها را به صورت خودکار حل می‌کند.

نکته 8:
‏ضرورت دارد که نسخه کامپایل‌شده کتابخانه SpatiaLite با نسخه کامپایل‌شده هسته SQLite مورد استفاده، به لحاظ معماری و بیت‌نس (۳۲ یا ۶۴ بیتی) سازگاری داشته باشد.

نکته 9:
‏پس از نصب، پایگاه داده SQLite با استفاده از توابع فضایی جدید که به صورت پیشوند ST_ (Spatial Type) مشخص می‌شوند، قابلیت ذخیره و تحلیل داده‌های هندسی را کسب می‌کند.

نکته 10:
‏نصب موفقیت‌آمیز باید با اجرای یک پرس‌وجوی ساده، مانند SELECT spatialite_version()، که نسخه افزونه فضایی را برمی‌گرداند، مورد تأیید قرار گیرد.


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

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

آدرس کانال اصلی :
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
‏ویژگی `DebuggerDisplay` در C#‎ به شما کمک می‌کنه اطلاعات مهم یک کلاس رو در حالت دیباگ سریع‌تر ببینید. 🐞

‏اما می‌دونستید میشه از `{` و `}` برای نمایش فیلدها و پراپرتی‌ها استفاده کرد؟ مثلاً:

`[DebuggerDisplay("User: {Name}, ID: {Id}")]`

‏اینطوری موقع دیباگ، اسم و ID کاربر رو یکجا می‌بینید. حتی میشه متدها رو هم فراخوانی کرد!

`[DebuggerDisplay("Value: {CalculateValue()}")]`

‏فقط حواستون باشه متد خیلی پیچیده نباشه که دیباگ رو کُند کنه. ⚙️

https://t.me/csharp7
💡 تزریق وابستگی (Dependency Injection) در C# می‌تونه در زمان کامپایل هم انجام بشه، نه فقط در زمان اجرا.

⚙️ این روش باعث میشه خطاهای مربوط به وابستگی‌ها زودتر مشخص بشن و performance بهتری داشته باشیم.

📚 برای این کار میشه از Source Generators استفاده کرد.

https://t.me/csharp7
‏عبارات لامبدا در C# ابزاری قدرتمند برای نوشتن کدهای فشرده و خوانا، به خصوص در کوئری‌های LINQ هستند. این عبارات به شما اجازه می‌دهند تا توابع ناشناس را به صورت مختصر تعریف کنید.

‏برای مثال، فرض کنید لیستی از اعداد دارید و می‌خواهید فقط اعداد زوج را فیلتر کنید. به جای تعریف یک متد جداگانه، می‌توانید از یک عبارت لامبدا استفاده کنید:

var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evenNumbers = numbers.Where(n => n % 2 == 0);

foreach (var num in evenNumbers)
{
‏ Console.WriteLine(num); // خروجی: 2, 4, 6, 8, 10
}


‏در این مثال، n => n % 2 == 0 یک عبارت لامبدا است که به عنوان یک پارامتر به متد Where پاس داده می‌شود. n پارامتر ورودی و n % 2 == 0 بدنه عبارت است که نتیجه true یا false را برمی‌گرداند. 🚀💡

https://t.me/csharp7
‏اجرای تاخیری (Deferred execution) در LINQ، با اینکه قدرتمنده، می‌تونه دردسرساز هم بشه! 😬

‏فرض کن یه کوئری LINQ نوشتی که از یه منبع داده (مثلاً یه لیست) استفاده می‌کنه. اگه بعد از تعریف کوئری، منبع داده تغییر کنه، نتیجه کوئری هم عوض می‌شه. چون اجرای واقعی کوئری تا لحظه‌ای که نتیجه‌ش نیاز نباشه، به تاخیر می‌افته.

‏برای جلوگیری از این اتفاق، می‌تونی از `ToList()` یا `ToArray()` استفاده کنی تا نتیجه کوئری رو همون لحظه materialize کنی و دیگه به منبع داده وابسته نباشی.

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
‏در ASP.NET Core، Layouts و Partial Views ابزارهایی قدرتمند برای بازاستفاده کد در نماها (Views) هستند.

‏Layouts ساختار کلی صفحات وب شما را تعریف می‌کنند. به عنوان مثال، هدر، فوتر و منوی ناوبری که در تمامی صفحات سایت مشترک هستند، می‌توانند در یک Layout قرار بگیرند. سپس، نماهای دیگر می‌توانند به این Layout ارجاع دهند و فقط بخش محتوای اصلی خود را تعریف کنند.

‏Partial Views قطعه‌های کوچکی از HTML هستند که می‌توانند در نماهای مختلف یا حتی درون Layout ها قرار گیرند. این امر برای نمایش بخش‌های تکراری UI یا منطق نمایشی که در چندین جا استفاده می‌شود، بسیار مفید است.

‏برای مثال، یک Layout اصلی می‌تواند به این صورت باشد:

<!DOCTYPE html>
<html>
<head>
‏ <title>وبسایت من</title>
</head>
<body>
<header>
‏ <h1>سربرگ سایت</h1>
@await Html.PartialAsync("_Navigation")
</header>
<main>
@RenderBody()
</main>
<footer>
‏ <p>&copy; 2023 وبسایت من</p>
</footer>
</body>
</html>


‏و در این Layout، ما یک Partial View به نام _Navigation.cshtml را فراخوانی کرده‌ایم تا منوی ناوبری سایت را نمایش دهد.

@* _Navigation.cshtml *@
<nav>
<ul>
‏ <li><a href="/">صفحه اصلی</a></li>
‏ <li><a href="/about">درباره ما</a></li>
‏ <li><a href="/contact">تماس با ما</a></li>
</ul>
</nav>


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

https://t.me/csharp7
‏ویژگی `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