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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در C#، مدیریت خطا و استثناها بخش مهمی از نوشتن کدهای پایدار و قابل اعتماد است. استثناها (Exceptions) نشان‌دهنده رویدادهایی هستند که در حین اجرای برنامه رخ می‌دهند و اجرای عادی برنامه را مختل می‌کنند.

‏انواع رایج استثناها در C#:

`ArgumentNullException`: زمانی رخ می‌دهد که یک متد، پارامتری را که نباید null باشد، با مقدار null دریافت کند.
```csharp
public void ProcessData(string data)
{
if (data == null)
{
throw new ArgumentNullException(nameof(data));
}
‏ // ... پردازش داده
}
```

ArgumentOutOfRangeException: زمانی رخ می‌دهد که مقدار یک پارامتر خارج از محدوده مجاز باشد.
    public void SetValue(int value)
{
if (value < 0 || value > 100)
{
throw new ArgumentOutOfRangeException(nameof(value), "Value must be between 0 and 100.");
}
‏ // ... تنظیم مقدار
}


`InvalidOperationException`: زمانی رخ می‌دهد که وضعیت یک شیء برای انجام عملیات درخواستی نامعتبر باشد.
```csharp
private bool _isInitialized = false;

public void PerformAction()
{
if (!_isInitialized)
{
throw new InvalidOperationException("Operation cannot be performed because the object is not initialized.");
}
‏ // ... انجام عملیات
}
```

FileNotFoundException: زمانی رخ می‌دهد که سیستمی تلاش کند فایلی را که وجود ندارد، باز کند.
    try
{
string filePath = "nonexistent.txt";
string content = File.ReadAllText(filePath);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"Error: File not found - {ex.FileName}");
}


`DivideByZeroException`: زمانی رخ می‌دهد که تلاش شود عددی بر صفر تقسیم شود.
```csharp
try
{
int a = 10;
int b = 0;
int result = a / b;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Error: Cannot divide by zero.");
}
```

NullReferenceException: زمانی رخ می‌دهد که تلاش شود از یک شیء که مقدار آن null است، استفاده شود.
    string text = null;
try
{
‏ int length = text.Length; // این خط باعث NullReferenceException می‌شود
}
catch (NullReferenceException ex)
{
Console.WriteLine("Error: Attempted to access a member of a null object.");
}


‏استفاده صحیح از بلوک‌های try-catch به شما امکان می‌دهد تا این استثناها را مدیریت کرده و از کرش کردن برنامه جلوگیری کنید. 💥💡

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

🟣 موضوع : ‏نکات بهینه‌سازی و بهبود عملکرد در C#

🟢 سوال :

‏کدام یک از موارد زیر یک روش برای بهبود عملکرد سریال‌سازی و غیرسریال‌سازی در C# است؟

گزینه ۱:
‏استفاده از XML Serializer

گزینه ۲:
‏استفاده از JSON Serializer

گزینه ۳:
‏استفاده از Binary Serializer

گزینه ۴:
‏استفاده از Protocol Buffers یا MessagePack

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

🟢 توضیح :

‏Protocol Buffers و MessagePack برای سریال‌سازی و غیرسریال‌سازی کارآمدتر هستند.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، اعضای ساختارها (structs) در زمان ایجاد، مقادیر پیش‌فرض خود را دریافت می‌کنند. این مقادیر بسته به نوع داده عضو متفاوت است:

‏- انواع مقداری (Value Types):
‏ - انواع عددی (مانند int, float, double, decimal): مقدار پیش‌فرض آن‌ها صفر است.
‏ - انواع منطقی (bool): مقدار پیش‌فرض آن‌ها false است.
‏ - انواع کاراکتری (char): مقدار پیش‌فرض آن‌ها \0 (کاراکتر null) است.
‏ - انواع شمارشی (enums): مقدار پیش‌فرض آن‌ها برابر با مقدار عددی صفر عضو اول enum است.
‏ - ساختارهای دیگر: مقدار پیش‌فرض آن‌ها نیز صفر برای تمام اعضای مقداری‌شان خواهد بود.

‏- انواع ارجاعی (Reference Types) که به عنوان اعضای ساختار قرار می‌گیرند:
‏ - مانند کلاس‌ها، رشته‌ها (string)، آرایه‌ها و delegates: مقدار پیش‌فرض آن‌ها null است.

‏این رفتار تضمین می‌کند که حتی قبل از اختصاص مقدار صریح، اعضای ساختار دارای یک وضعیت معتبر و قابل پیش‌بینی باشند. 💡⚙️

https://t.me/csharp7
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Create Java Project

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

🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.

🟣 Eclipse

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

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

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

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

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

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

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

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

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
‏هنگام کار با مجموعه‌های داده در C#، به خصوص زمانی که نیاز به افزودن یا حذف مکرر عناصر در ابتدای یک لیست دارید، توجه به کارایی عملیات بسیار مهم است.

‏برای مثال، تصور کنید لیستی از اعداد دارید و می‌خواهید اعداد جدیدی را به ابتدای آن اضافه کنید. استفاده از List<T> برای این منظور می‌تواند هزینه‌بر باشد، زیرا هر بار که عنصری به ابتدا اضافه می‌شود، تمام عناصر موجود باید یک خانه به جلو شیفت داده شوند. این عملیات در صورت تکرار زیاد، می‌تواند منجر به کندی قابل توجه برنامه شود.

‏// مثال با List<T> که می‌تواند کند باشد
var myList = new List<int> { 1, 2, 3 };
for (int i = 0; i < 1000; i++)
{
‏ myList.Insert(0, i); // عملیات Insert در ابتدای List<T> پرهزینه است
}


‏در چنین سناریوهایی، استفاده از LinkedList<T> گزینه بهتری است. LinkedList<T> برای عملیات افزودن و حذف در ابتدا یا انتهای لیست، بسیار کارآمدتر عمل می‌کند، زیرا نیازی به جابجایی عناصر ندارد و صرفاً با دستکاری اشاره‌گرها (pointers) انجام می‌شود.

‏// مثال با LinkedList<T> که کارآمدتر است
var myLinkedList = new LinkedList<int>();
for (int i = 0; i < 1000; i++)
{
‏ myLinkedList.AddFirst(i); // AddFirst در LinkedList<T> بسیار سریع است
}


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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Hover Help

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

🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.

🟣 Eclipse

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

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، دسترسی به عناصر یک List<T> هم از طریق index (اندیس) و هم با استفاده از حلقه‌های تکرار امکان‌پذیر است.

‏برای دسترسی مستقیم به یک عنصر، از اندیس آن استفاده کنید:

List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
‏string firstPerson = names[0]; // دسترسی به عنصر اول (اندیس 0)
‏string secondPerson = names[1]; // دسترسی به عنصر دوم (اندیس 1)


‏برای پیمایش کل لیست، می‌توانید از حلقه for یا foreach بهره ببرید:

‏با استفاده از حلقه for و اندیس:

for (int i = 0; i < names.Count; i++)
{
Console.WriteLine($"Element at index {i}: {names[i]}");
}


‏با استفاده از حلقه foreach (که معمولاً خواناتر است):

foreach (string name in names)
{
Console.WriteLine($"Name: {name}");
}


‏هر دو روش برای کار با مجموعه‌های داده در لیست‌های C# کاربردی هستند. 💡📊

https://t.me/csharp7
‏SyntaxProvider در Roslyn، ابزاری برای تحلیل سورس کد C# به صورت افزایشی (Incremental) است. 🔄 این رویکرد باعث میشه کامپایلر فقط تغییرات کد رو پردازش کنه و سرعت کامپایل به شکل چشمگیری افزایش پیدا کنه. 🚀 برای پروژه‌های بزرگ، SyntaxProvider یک گزینه عالی برای بهینه‌سازی فرآیند بیلد محسوب می‌شه. 👍

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
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 آموزش گیت (Git) - مقدمه

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

🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.

🟣 آموزش گیت (Git)

🟢 زبان آموزش: فارسی


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Different IDEs

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

🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.

🟣 Eclipse

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

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏توی #C، مقایسه بر اساس مقدار (Value-based equality) یعنی دو شیء وقتی برابرند که مقدارشون یکسان باشه.

‏اما مقایسه بر اساس ارجاع (Reference equality) یعنی دو شیء فقط وقتی برابرند که دقیقاً یک شیء در حافظه باشند. 🧠

‏متغیرهای value type مثل int و bool مقایسه‌شون value-based هست، اما classها به‌صورت پیش‌فرض reference-based مقایسه میشن.

‏میتونید با override کردن متد Equals() و GetHashCode() برای classها، مقایسه value-based رو پیاده‌سازی کنید. ⚙️

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏در C#، چندریختی (Polymorphism) یکی از اصول کلیدی برنامه‌نویسی شیءگراست که به اشیاء از کلاس‌های مختلف اجازه می‌دهد تا به یک پیام (متد) به روش‌های متفاوت پاسخ دهند. این قابلیت معمولاً با استفاده از وراثت و متدهای مجازی پیاده‌سازی می‌شود.

‏برای درک بهتر، فرض کنید یک کلاس پایه Shape داریم که شامل متدی به نام Draw است. این متد در کلاس پایه فقط یک پیام کلی نمایش می‌دهد.

public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a generic shape.");
}
}


‏کلمه کلیدی virtual در متد Draw به کامپایلر می‌گوید که این متد می‌تواند توسط کلاس‌های مشتق شده بازتعریف (Override) شود.

‏حالا کلاس‌های مشتق شده‌ای مانند Circle و Square را در نظر بگیرید که از Shape ارث می‌برند. هر کدام از این کلاس‌ها می‌توانند متد Draw را بازتعریف کنند تا رفتار خاص خود را پیاده‌سازی کنند.

public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}

public class Square : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a square.");
}
}


‏کلمه کلیدی override نشان می‌دهد که این متد، متد مجازی کلاس پایه را بازتعریف می‌کند.

‏حالا می‌توانیم نمونه‌هایی از این کلاس‌ها را ایجاد کرده و رفتار چندریختی را مشاهده کنیم:

Shape myCircle = new Circle();
Shape mySquare = new Square();
Shape genericShape = new Shape();

‏myCircle.Draw(); // خروجی: Drawing a circle.
‏mySquare.Draw(); // خروجی: Drawing a square.
‏genericShape.Draw(); // خروجی: Drawing a generic shape.


‏در اینجا، حتی اگر متغیر از نوع Shape باشد، متد Draw فراخوانی شده مربوط به کلاس واقعی شیء ( Circle یا Square) است. این قدرت چندریختی را نشان می‌دهد. 💡🌍

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

‏به عنوان مثال، قبل از استفاده از یک ورودی کاربر در محاسبات، می‌توانیم بررسی کنیم که آیا این ورودی از نوع عددی مورد انتظار است یا خیر.

string userInput = Console.ReadLine();

if (int.TryParse(userInput, out int number))
{
‏ // کد اصلی که از 'number' استفاده می‌کند
‏ Console.WriteLine($"عدد وارد شده: {number}");
}
else
{
‏ Console.WriteLine("ورودی نامعتبر است. لطفاً یک عدد صحیح وارد کنید.");
}


‏استفاده از متدهایی مانند int.TryParse به جای تبدیل مستقیم با int.Parse، از پرتاب شدن استثنا (Exception) در صورت نامعتبر بودن ورودی جلوگیری می‌کند. این رویکرد، برنامه‌نویسی ایمن‌تر و خواناتری را فراهم می‌آورد. 🛡️

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
‏فشرده‌سازی Requestها تو #aspnetcore 🚀 باعث افزایش سرعت و کاهش مصرف پهنای باند میشه.

‏Middleware مربوط به Decompression اینجاست تا Requestهای فشرده (Gzip, Brotli) رو براتون باز کنه. 📦

‏دیگه نگران هندل کردن دستی فشرده‌سازی نباشید! 👍

```csharp
// Startup.cs
public void Configure(IApplicationBuilder app)
{
app.UseRequestDecompression();
// ...
}
```
‏به همین سادگی!
#dotnet #middleware

https://t.me/dotnet7ir
‏Nullable annotation در constraintهای generic، امکان تعیین nullability نوع T رو فراهم میکنه. 🤔

```csharp
‏// T? : T میتونه nullable باشه
‏// T : T نمیتونه nullable باشه
public class MyClass<T> where T : class? { ... }
```

‏اینطوری میشه مشخص کرد که یک generic type parameter میتونه null بپذیره یا نه. این کار به جلوگیری از خطاهای احتمالی null reference کمک میکنه. 👌

https://t.me/csharp7