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

آیدی ادمین:
@ma_limbs
Download Telegram
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
💡 نکته #SQL

🟣 موضوع : NATURAL JOIN

نکته :

‏وقتی با NATURAL JOIN کار می‌کنی، حتماً قبلش ساختار جداول رو چک کن. 👀


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏کلاس‌های انتزاعی (Abstract Classes) و اینترفیس‌ها (Interfaces) هر دو در C# برای تعریف قراردادها و دستیابی به انتزاع استفاده می‌شوند، اما تفاوت‌های کلیدی دارند.

‏کلاس انتزاعی:
‏- می‌تواند شامل متدهای انتزاعی (بدون پیاده‌سازی) و متدهای غیرانتزاعی (با پیاده‌سازی) باشد.
‏- می‌تواند دارای اعضای کلاس مانند فیلدها، سازنده‌ها (constructors) و توابع destructor باشد.
‏- یک کلاس فقط می‌تواند از یک کلاس انتزاعی ارث‌بری کند (قانون ارث‌بری تکی).
‏- برای تعریف یک "چیزی" است که می‌تواند حالت (state) داشته باشد و رفتار مشترک را به اشتراک بگذارد.

‏اینترفیس:
‏- فقط می‌تواند شامل متدهای انتزاعی، خصوصیات (properties) و رویدادها (events) باشد. از C# 8 به بعد، امکان افزودن متدهای با پیاده‌سازی پیش‌فرض نیز فراهم شده است.
‏- نمی‌تواند دارای فیلد باشد.
‏- یک کلاس می‌تواند از چندین اینترفیس پیاده‌سازی کند (ارث‌بری چندگانه).
‏- برای تعریف یک "قابلیت" یا "وظیفه" است که کلاس‌ها می‌توانند آن را پیاده‌سازی کنند.

‏مقایسه:
‏| ویژگی | کلاس انتزاعی | اینترفیس |
|---|---|---|
‏| پیاده‌سازی متد | دارد (هم انتزاعی و هم غیرانتزاعی) | ندارد (به جز متدهای با پیاده‌سازی پیش‌فرض از C# 8) |
‏| فیلد | دارد | ندارد |
‏| سازنده | دارد | ندارد |
‏| ارث‌بری | تکی (از یک کلاس) | چندگانه (از چندین اینترفیس) |
‏| هدف اصلی | اشتراک‌گذاری کد و حالت بین کلاس‌های مرتبط | تعریف قرارداد و قابلیت |

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

‏// مثال کلاس انتزاعی
abstract class Shape
{
‏ public abstract double Area(); // متد انتزاعی

‏ public void Display() // متد غیرانتزاعی
{
Console.WriteLine("This is a shape.");
}
}

class Circle : Shape
{
public double Radius { get; set; }

public Circle(double radius)
{
Radius = radius;
}

public override double Area()
{
return Math.PI * Radius * Radius;
}
}


‏// مثال اینترفیس
interface IDrawable
{
‏ void Draw(); // متد انتزاعی
}

interface IResizable
{
‏ void Resize(double factor); // متد انتزاعی
}

class Square : IDrawable, IResizable
{
public double Side { get; private set; }

public Square(double side)
{
Side = side;
}

public void Draw()
{
Console.WriteLine($"Drawing a square with side {Side}");
}

public void Resize(double factor)
{
Side *= factor;
Console.WriteLine($"Resized square to side {Side}");
}
}

💡


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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🧵 پایتون و تردها! یه کم کار سنگین داری و میخوای سریع‌تر انجام بشه؟ تردینگ (Threading) به کمکت میاد!

‏اما یه مشکل هست: ممکنه چند تا ترد بخوان همزمان به یه منبع دسترسی داشته باشن 🤯. اینجاست که Lockها وارد میشن!

‏Lock مثل یه کلید🔑 میمونه. هر تردی که بخواد از منبع استفاده کنه، اول باید کلید رو بگیره. وقتی کارش تموم شد، کلید رو پس میده تا ترد بعدی بتونه استفاده کنه.

‏با Lockها خیالت راحته که داده‌هات خراب نمیشن! 😎

https://t.me/python7ir
‏در ASP.NET Core دو نوع فیلتر برای مدیریت نتیجه درخواست‌ها وجود دارد: `IResultFilter` و endpoint filter.

‏`IResultFilter` بعد از اجرای action و قبل از serialize شدن نتیجه، اجرا می‌شود و امکان تغییر نتیجه نهایی را فراهم می‌کند.

‏endpoint filter اما قبل از binding مدل و اجرای action، و همچنین بعد از action و قبل از ارسال پاسخ اجرا می‌شود. endpoint filter کنترل بیشتری روی lifecycle درخواست دارد. ⚙️

‏انتخاب بین این دو، بستگی به میزان کنترل مورد نیاز شما دارد. 🎯

https://t.me/csharp7
‍‍
‏MemoryPool<T> در C# برای مدیریت کارآمد حافظه استفاده میشه. 💾 دیگه نیازی نیست نگران تخصیص و آزادسازی مکرر حافظه باشی.

‏میتونی MemoryPool رو به صورت پیش‌فرض استفاده کنی یا Pool خودت رو بسازی! 🧑‍💻 با ساخت custom pool، کنترل بیشتری روی نحوه تخصیص و استفاده از حافظه داری و می‌تونی اون رو دقیقاً مطابق نیازهای برنامه‌ات تنظیم کنی. ⚙️

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏در ASP.NET Core، برای اجرای وظایف پس‌زمینه در طول عمر برنامه، می‌توان از کلاس IHostedService استفاده کرد. این سرویس‌ها به طور خودکار توسط فریم‌ورک مدیریت و اجرا می‌شوند.

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

public class MyBackgroundService : IHostedService, IDisposable
{
private Timer _timer;

public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}

private void DoWork(object state)
{
‏ // منطق اجرای وظیفه پس‌زمینه شما اینجا قرار می‌گیرد
Console.WriteLine("Working...");
}

public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}

public void Dispose()
{
_timer?.Dispose();
}
}




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

‏بازگشت چندین مقدار با استفاده از Tuple:

Tuple به شما اجازه می‌دهد تا مجموعه‌ای از مقادیر با انواع داده‌های مختلف را در قالب یک شیء واحد بازگردانید.

(int count, string message, bool success) ProcessData()
{
‏ // فرض کنید این متد داده‌ها را پردازش می‌کند
int processedCount = 10;
‏ string resultMessage = "عملیات با موفقیت انجام شد.";
bool operationStatus = true;

return (processedCount, resultMessage, operationStatus);
}

‏// نحوه فراخوانی و استفاده از مقادیر بازگشتی:
var result = ProcessData();
‏Console.WriteLine($"تعداد: {result.count}");
‏Console.WriteLine($"پیام: {result.message}");
‏Console.WriteLine($"وضعیت: {result.success}");


‏در این مثال، متد ProcessData یک Tuple بازمی‌گرداند که شامل یک عدد صحیح، یک رشته و یک بولین است. شما می‌توانید به هر یک از این مقادیر با استفاده از نام‌گذاری (مانند result.count) یا ایندکس (مانند result.Item1) دسترسی پیدا کنید. استفاده از نام‌گذاری خوانایی کد را افزایش می‌دهد.

‏بازگشت یک شیء سفارشی:

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

public class ProcessResult
{
public int Count { get; set; }
public string Message { get; set; }
public bool Success { get; set; }
}

ProcessResult ProcessDataWithClass()
{
‏ // فرض کنید این متد داده‌ها را پردازش می‌کند
return new ProcessResult
{
Count = 15,
‏ Message = "پردازش کامل شد.",
Success = true
};
}

‏// نحوه فراخوانی:
var classResult = ProcessDataWithClass();
‏Console.WriteLine($"تعداد: {classResult.Count}");
‏Console.WriteLine($"پیام: {classResult.Message}");
‏Console.WriteLine($"وضعیت: {classResult.Success}");


‏این روش، علاوه بر سازماندهی بهتر کد، امکان اضافه کردن متدها یا ویژگی‌های بیشتر به شیء بازگشتی را در آینده فراهم می‌کند. 🚀💡

https://t.me/csharp7
‏در C#، برای پیمایش کلیدها و مقادیر یک دیکشنری (Dictionary<TKey, TValue>) با استفاده از حلقه foreach، می‌توانید به روش‌های مختلفی عمل کنید.

‏برای دسترسی به جفت‌های کلید-مقدار (Key-Value Pairs):
Dictionary<string, int> ages = new Dictionary<string, int>()
{
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35}
};

foreach (KeyValuePair<string, int> pair in ages)
{
Console.WriteLine($"Name: {pair.Key}, Age: {pair.Value}");
}

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

‏برای دسترسی فقط به کلیدها:
foreach (string key in ages.Keys)
{
Console.WriteLine($"Key: {key}");
}


‏برای دسترسی فقط به مقادیر:
foreach (int value in ages.Values)
{
Console.WriteLine($"Value: {value}");
}

‏این قابلیت‌ها انعطاف‌پذیری بالایی در کار با داده‌های دیکشنری فراهم می‌کنند. 💡📚

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#

🟣 موضوع : ‏اشتراک‌گذاری کد بین پلتفرم‌ها با .NET Standard

🟢 سوال :

‏هدف اصلی .NET Standard چیست؟

گزینه ۱:
‏توسعه بازی‌های کامپیوتری

گزینه ۲:
‏ایجاد رابط کاربری گرافیکی

گزینه ۳:
‏اشتراک‌گذاری کد بین پلتفرم‌های .NET

گزینه ۴:
‏مدیریت پایگاه داده

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

🟢 توضیح :

‏هدف اصلی .NET Standard، اشتراک‌گذاری کد بین پلتفرم‌های مختلف .NET است.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C# 9 به بعد، رکوردها (Records) از Primary Constructor پشتیبانی می‌کنند.
‏یعنی می‌توانید پارامترهای سازنده اصلی را مستقیماً در تعریف رکورد مشخص کنید. این پارامترها هم به عنوان ویژگی‌های رکورد استفاده می‌شوند و هم برای مقداردهی اولیه.

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

‏با این کار، هم کد کوتاه‌تر می‌شود و هم خوانایی آن افزایش می‌یابد. 👌🤓
‏به این شکل دیگر نیازی به نوشتن سازنده جداگانه نیست.

https://t.me/csharp7
‏C#‎ 10 به بعد، میشه برای پارامترهای Lambda Expression مقدار پیش‌فرض تعیین کرد.

```csharp
var add = (int x, int y = 1) => x + y;
Console.WriteLine(add(5)); // Output: 6
```

‏اینطوری میشه انعطاف‌پذیری کد رو بالا برد و از نوشتن Overloadهای متعدد جلوگیری کرد. 👌💻

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

🟣 موضوع : ‏برنامه‌نویسی غیرهمزمان با async و await

🟢 سوال :

‏کدام یک از موارد زیر یک روش برای منتظر ماندن برای اتمام یک وظیفه غیرهمزمان است؟

گزینه ۱:
‏استفاده از پایگاه داده واقعی

گزینه ۲:
‏استفاده از کلیدواژه await

گزینه ۳:
‏استفاده از متغیرهای سراسری

گزینه ۴:
‏استفاده از توابع بازگشتی

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

🟢 توضیح :

‏کلیدواژه await برای منتظر ماندن برای اتمام یک وظیفه غیرهمزمان استفاده می‌شود.

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

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

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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏دانستنی C#‎:

‏PriorityQueue و SortedSet هر دو برای نگهداری داده‌های مرتب‌شده استفاده می‌شوند، اما PriorityQueue صف اولویت‌دار است (داده با بالاترین اولویت اول پردازش می‌شود) در حالی که SortedSet یک مجموعه مرتب‌شده است (داده‌ها به ترتیب خاصی نگهداری می‌شوند و امکان جستجو و حذف سریع وجود دارد). ⚙️

‏انتخاب بین این دو بستگی به نیازهای خاص شما دارد. 🧰

https://t.me/csharp7
‏ویژگی MethodImplOptions در C# به کامپایلر و JIT اجازه می‌دهد تا نحوه بهینه‌سازی و اجرای یک متد را کنترل کنند. ⚙️

‏به عنوان مثال، با استفاده از MethodImplOptions.Synchronized می‌توان یک متد را به‌صورت thread-safe اجرا کرد، بدون نیاز به استفاده دستی از قفل‌ها (locks). 🛡️

‏این ویژگی به بهینه‌سازی عملکرد و کنترل دقیق‌تر بر نحوه اجرای کد کمک می‌کند.

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏ویژگی Inline Arrays در C# 12، راهی برای تخصیص آرایه‌های پشت سر هم در یک struct است. 🚀

‏این کار، سربار تخصیص حافظه جداگانه برای آرایه را حذف می‌کند و می‌تواند در سناریوهای حساس به عملکرد (performance-critical) بسیار مفید باشد. ⚙️

‏به عنوان مثال، در بازی‌سازی یا پردازش داده‌های بزرگ، استفاده از Inline Arrays می‌تواند بهبود چشمگیری در سرعت و کارایی ایجاد کند. 🎯

https://t.me/csharp7