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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در سی شارپ، Generic Interfaces به شما این امکان را می‌دهند که یک قرارداد (Interface) تعریف کنید که بتواند با انواع مختلف داده کار کند، بدون نیاز به تعریف مجدد همان رابط برای هر نوع. این قابلیت، انعطاف‌پذیری و قابلیت استفاده مجدد کد را به شدت افزایش می‌دهد.

‏مثال ساده‌ای از تعریف یک Generic Interface:

public interface IRepository<T>
{
void Add(T item);
T GetById(int id);
IEnumerable<T> GetAll();
}


‏در این مثال، IRepository<T> یک رابط عمومی است که T یک پارامتر نوع (Type Parameter) است. این رابط می‌تواند برای مدیریت موجودیت‌های مختلف مانند User، Product و غیره استفاده شود، بدون اینکه نیاز به نوشتن رابط‌های جداگانه برای هر کدام باشد.

public class UserRepository : IRepository<User>
{
‏ // پیاده‌سازی متدها برای نوع User
}

public class ProductRepository : IRepository<Product>
{
‏ // پیاده‌سازی متدها برای نوع Product
}


‏این رویکرد، کد را تمیزتر، قابل نگهداری‌تر و کمتر تکراری می‌کند. 🚀
💡

https://t.me/csharp7
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 C# Beginners Tutorial - 168 - Make a Class for a Foreach Loop

🟢 کیفیت : متوسط

🔴 توجه کنید با تنظیمات خود تلگرام می توانید حجم و کیفیت ویدیو را بر اساس سرعت اینترنت خود تنظیم نمایید.

🟣 C# Beginners Tutorials Playlist

🟢 زبان آموزش: انگلیسی


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏C# 10 قابلیتی داره به اسم String Interpolation Handler.

‏این قابلیت به شما اجازه میده String Interpolation رو به شکلی انجام بدین که تخصیص حافظه کمتری داشته باشه (low-allocation). 🚀

‏به این ترتیب، عملکرد برنامه مخصوصاً توی حلقه‌ها و جاهایی که String Interpolation زیاد استفاده میشه، بهینه‌تر میشه. ⚙️

https://t.me/csharp7
‏C#‎: در ASP.NET Core، با Route Parameter Binding پیشرفته، لازم نیست نام پارامتر route دقیقاً با نام آرگومان اکشن یکی باشد.

‏کافیست از Attributeـهای ‎[FromRoute("route_name")]‎ برای مَپ کردن استفاده کنید. اینطوری انعطاف‌پذیری بیشتری در نام‌گذاری routeها خواهید داشت. ⚙️

‏مثال:
```csharp
[HttpGet("users/{userId:int}")]
public IActionResult GetUser([FromRoute("userId")] int id) { ... }
```


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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏C# 10 قابلیتی داره به اسم `DistinctBy` و `ExceptBy`.

‏با `DistinctBy` میتونید لیستی از اشیاء رو بر اساس یک property خاص یکتا کنید. 🚀

‏`ExceptBy` هم دو تا لیست رو بر اساس یک property خاص با هم مقایسه میکنه و آیتم‌های لیست اول رو که در لیست دوم نیستند برمی‌گردونه.

‏خیلی جاها کارتون رو راه میندازه! 😉

https://t.me/csharp7
‏در متدهای ناهمزمان قدیمی‌تر C# مانند Task.ContinueWith، ممکن است با چندین استثنا به طور همزمان مواجه شوید. در چنین سناریوهایی، AggregateException به شما امکان می‌دهد تا تمام استثناهای رخ داده را مدیریت کنید.

‏به طور پیش‌فرض، وقتی یک Task که با ContinueWith ایجاد شده است، با خطا مواجه می‌شود، این خطا به صورت یک AggregateException درون task.Exception نمایش داده می‌شود. این AggregateException حاوی لیستی از تمام استثناهای رخ داده است.

‏برای مدیریت این استثناها، می‌توانید از متد Handle بر روی AggregateException استفاده کنید. این متد به شما اجازه می‌دهد تا با استفاده از یک Func<Exception, bool>، هر نوع استثنا را بررسی کرده و تصمیم بگیرید که آیا آن استثنا مدیریت شده است یا خیر.

‏مثال:

Task.Run(() => {
‏ throw new InvalidOperationException("عملیات نامعتبر");
})
.ContinueWith(task => {
if (task.IsFaulted)
{
task.Exception.Handle(ex => {
if (ex is InvalidOperationException)
{
‏ Console.WriteLine($"عملیات نامعتبر رخ داد: {ex.Message}");
‏ return true; // استثنا مدیریت شد
}
‏ return false; // استثنا مدیریت نشد
});
}
});


‏اگر چندین استثنا رخ دهد، AggregateException شامل همه آن‌ها خواهد بود و متد Handle به ترتیب هر یک را بررسی می‌کند. اگر Handle برای یک استثنا true برگرداند، آن استثنا به عنوان مدیریت شده تلقی می‌شود. در غیر این صورت، اگر استثنایی مدیریت نشود، AggregateException دوباره پرتاب خواهد شد.

‏استفاده از AggregateException در ContinueWith به شما کنترل بیشتری بر روی مدیریت خطاهای همزمان در عملیات ناهمزمان قدیمی‌تر می‌دهد. ⚠️💡

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
🔵 کوییز #HTML

🟣 موضوع : ‏استفاده از تگ output برای نمایش نتایج

🟢 سوال :

‏کدام تگ HTML5 به طور خاص برای نمایش نتیجه یک محاسبه یا خروجی یک تعامل کاربر (مانند یک فرم) طراحی شده است؟

گزینه ۱:
`<input>`

گزینه ۲:
`<textarea>`

گزینه ۳:
`<output>`

گزینه ۴:
`<label>`



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

🟢 توضیح :

‏تگ `<output>` یک عنصر معنایی در HTML5 است که برای نمایش نتایج محاسبات انجام شده توسط اسکریپت‌ها یا تعاملات کاربر در یک فرم استفاده می‌شود.

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

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

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

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



کدام گزینه معادل NOT LIKE در SQL است؟ 
   A) <> 
   B) !LIKE 
   C) NOT (LIKE) 
   D) LIKE NOT 


   پاسخ:
C) NOT (LIKE) 

   توضیح: برای نفی شرایط LIKE از NOT LIKE یا NOT (column LIKE pattern) استفاده می‌شود. 

   

💗 مطالب بعدی ما رو حتما دنبال کنید!



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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🔵 کوییز #HTML

🟣 موضوع : ‏تگ‌های ویدئویی HTML5 (video)

🟢 سوال :

‏آیا می‌توان از جاوااسکریپت برای کنترل پخش ویدیو (مانند پخش، مکث، تنظیم صدا) استفاده کرد؟

گزینه ۱:
‏خیر، کنترل ویدیو فقط از طریق ویژگی‌های HTML امکان‌پذیر است

گزینه ۲:
‏بله، API قدرتمندی برای کنترل پخش ویدیو از طریق جاوااسکریپت وجود دارد

گزینه ۳:
‏فقط برای ویدیوهایی که autoplay آن‌ها فعال است

گزینه ۴:
‏بستگی به مرورگر کاربر دارد



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

🟢 توضیح :

‏بله، HTML5 Video API یک رابط برنامه‌نویسی قدرتمند در جاوااسکریپت فراهم می‌کند که به توسعه‌دهندگان اجازه می‌دهد تا پخش ویدیو، صدا، وضعیت پخش، صدا، زمان فعلی، مدت زمان و بسیاری از جنبه‌های دیگر پخش ویدیو را کنترل و مدیریت کنند.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏ویژگی `RequiresUnreferencedCode` در C# به کامپایلر اطلاع میده که یک متد یا اسمبلی ممکنه به کدهایی وابسته باشه که در فرآیند "trimming" حذف شدن. ✂️

‏Trimming بخشی از فرآیند انتشار برنامه‌های بهینه شده است که کدهای استفاده نشده رو حذف میکنه. 🗑️

‏استفاده از این ویژگی باعث میشه کامپایلر هشدارهایی رو نمایش بده تا توسعه‌دهنده‌ها از این وابستگی‌ها آگاه بشن و از مشکلات احتمالی در زمان اجرا جلوگیری کنن. ⚠️

https://t.me/csharp7
‏C# 12 از Arm64 SVE پشتیبانی می‌کند! 🤯

‏این یعنی چی؟ یعنی برنامه‌های C# حالا می‌تونن از قابلیت‌های پردازشی برداری (Vector Processing) در معماری Arm64 استفاده کنن. 💪

‏نتیجه؟ عملکرد بهینه‌تر و سریع‌تر در پردازش داده‌های حجیم. 🚀

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
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏نام فضاها (Namespaces) در C#

🟢 سوال :

‏کدام یک از موارد زیر یک محدودیت نام فضاها است؟

گزینه ۱:
‏عدم امکان تعریف اعضای ثابت

گزینه ۲:
‏عدم امکان تعریف اعضای readonly

گزینه ۳:
‏عدم امکان تعریف سازنده بدون پارامتر

گزینه ۴:
‏احتمال ایجاد وابستگی‌های پیچیده در صورت استفاده نادرست

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

🟢 توضیح :

‏در صورت استفاده نادرست، نام فضاها می‌توانند وابستگی‌های پیچیده ایجاد کنند.

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

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

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

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

🟣 موضوع : ‏ویژگی‌های جدید در C#

🟢 سوال :

‏کدام یک از موارد زیر یک ویژگی جدید در C# برای کار با null است؟

گزینه ۱:
‏حلقه‌های for

گزینه ۲:
Null-Coalescing Operator

گزینه ۳:
‏دستورات if

گزینه ۴:
‏کلاس‌های استاتیک

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

🟢 توضیح :

‏Null-Coalescing Operator یک ویژگی جدید در C# برای کار با مقادیر null است.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
🚀 می‌خوای APIهای مدرن و پرسرعت بسازی؟

‏FastAPI، فریم‌ورک پایتونی محبوب، اینجاست تا بهت کمک کنه! 🐍

‏یادگیریش آسونه و باهاش می‌تونی APIهایی با قابلیت‌های بالا و مستندسازی خودکار بسازی.

‏همین الان شروع کن و دنیای بک‌اند رو فتح کن! 💪
#پایتون #FastAPI #API

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

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏در زبان C#، حلقه foreach غالباً برای پیمایش مجموعه‌ها و آرایه‌ها به کار می‌رود. این حلقه به دلیل سادگی و خوانایی بالا، انتخاب محبوبی است. اما نکته مهم در مورد عملکرد آن این است که foreach برای انواع مختلف مجموعه‌ها، پیاده‌سازی‌های متفاوتی دارد.

‏برای آرایه‌ها و لیست‌های مجهز به ایندکس (مانند List<T>foreach معمولاً از یک شمارنده داخلی استفاده می‌کند که بسیار کارآمد است. در مقابل، برای مجموعه‌هایی که ایندکس ندارند یا دسترسی به عناصر آن‌ها از طریق ایندکس بهینه نیست (مانند LinkedList<T> یا Dictionary<TKey, TValue>foreach از طریق فراخوانی متد GetEnumerator() و سپس استفاده از MoveNext() و Current عمل می‌کند.

‏در بیشتر موارد، کامپایلر C# کد تولید شده برای foreach را به شکلی بهینه ترجمه می‌کند که عملکردی مشابه با حلقه‌های for معمولی (در صورت امکان) خواهد داشت. با این حال، در سناریوهای بسیار خاص و با مجموعه‌های بسیار بزرگ، ممکن است تفاوت‌های جزئی عملکردی مشاهده شود.

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

‏به عنوان مثال، در این قطعه کد:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}


‏این حلقه به طور موثری تمام عناصر لیست را پیمایش می‌کند.

‏در مقایسه، یک حلقه for برای همان لیست ممکن است به این شکل باشد:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Count; i++)
{
Console.WriteLine(numbers[i]);
}


‏در این مورد خاص برای List<T>، عملکرد foreach و for بسیار نزدیک است. اما foreach از پیچیدگی مدیریت ایندکس جلوگیری می‌کند. 💡
‏به طور کلی، foreach برای سهولت استفاده و خوانایی کد ترجیح داده می‌شود. 🚀
‏استفاده از foreach معمولاً بهینه‌سازی‌های لازم را از سوی کامپایلر دریافت می‌کند.

https://t.me/csharp7
‏در C#‎، `record` نوعی کلاس با رفتارهای خاص است.
تفاوت اصلی در نحوه مقایسه است: `record`ها بر اساس مقدار (value-based equality) و کلاس‌ها بر اساس ارجاع (reference-based equality) مقایسه می‌شوند.

‏`record struct` مشابه `record` است، اما نوع مقدار (value type) است و در پشته (stack) ذخیره می‌شود.
💾 این باعث می‌شود سریع‌تر باشد اما محدودیت‌هایی در اندازه دارد.

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

https://t.me/csharp7