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

آیدی ادمین:
@ma_limbs
Download Telegram
‏ویژگی `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
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏پایتون ۳.۸ به بعد، یه آپشن خفن داره: Walrus Operator (:=) 🤩

‏این اپراتور، همزمان مقدار رو به یه متغیر نسبت میده و اون رو برمی‌گردونه.

‏کد رو کوتاه‌تر و خواناتر می‌کنه! 😎

‏مثال:
```python
if (n := len([1,2,3])) > 2:
‏ print(f"طول لیست: {n}")
```

‏اینجا هم طول لیست رو حساب کردیم و هم همون موقع تو n ریختیم. باحال نیست؟ 😉

https://t.me/python7ir
‏در حلقه for در C#، می‌توانید جهت شمارش را با تغییر در بخش سوم (مرحله یا گام) کنترل کنید.

‏برای شمارش افزایشی (از عدد کمتر به بیشتر)، گام را مثبت در نظر می‌گیریم:

for (int i = 0; i < 5; i++)
{
‏ // کد شما
}
‏// خروجی: 0, 1, 2, 3, 4


‏برای شمارش کاهشی (از عدد بیشتر به کمتر)، گام را منفی در نظر می‌گیریم:

for (int i = 5; i > 0; i--)
{
‏ // کد شما
}
‏// خروجی: 5, 4, 3, 2, 1


‏همچنین می‌توانید گام را بزرگتر از ۱ انتخاب کنید:

for (int i = 0; i < 10; i += 2)
{
‏ // کد شما
}
‏// خروجی: 0, 2, 4, 6, 8


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#‎ می‌توانید از `unsafe code` برای دسترسی مستقیم به حافظه استفاده کنید. این قابلیت، امکان انجام `pointer arithmetic` (محاسبات ریاضی روی اشاره‌گرها) را فراهم می‌کند.

‏با استفاده از کلمه کلیدی `unsafe` می‌توانید یک بلوک کد یا متد را به عنوان unsafe مشخص کنید.

```csharp
unsafe {
int number = 10;
‏ int* pointerToNumber = &number; // گرفتن آدرس متغیر
‏ *pointerToNumber = 20; // تغییر مقدار متغیر از طریق اشاره‌گر
}
```

‏دقت کنید که استفاده از unsafe code نیازمند تنظیمات پروژه است و ممکن است خطرات امنیتی به همراه داشته باشد. 🔒👨‍💻

https://t.me/csharp7
‏`IMemoryOwner<T>` برای مدیریت حافظه‌هایی که مالکیت انحصاری دارند استفاده میشه. 🧠

‏برخلاف `using Memory<T>` که فقط یک *نما* از حافظه رو در اختیار داره، `IMemoryOwner<T>` مسئول تخصیص و آزادسازی حافظه‌ست. 🗑️

‏این یعنی با `IMemoryOwner<T>` کنترل بیشتری روی طول عمر حافظه داری و می‌تونی مطمئن بشی که بعد از اتمام کار، حافظه به درستی آزاد میشه.

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
📌 PooledStringBuilder چیست؟

‏آیا می‌دانستید در #C شارپ، استفاده مکرر از StringBuilder باعث تخصیص حافظه زیاد می‌شود؟ 🤔

‏راه حل، استفاده از `PooledStringBuilder` است. این کلاس، StringBuilder را از Pool برمی‌دارد و پس از استفاده، به Pool برمی‌گرداند. این کار از تخصیص و آزادسازی مکرر حافظه جلوگیری می‌کند. ♻️

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

https://t.me/csharp7
📌 `params Span<T>` در C# 7.2 معرفی شد.

‏با این قابلیت، آرگومان‌های متغیر یک متد می‌توانند به جای آرایه، از نوع `Span<T>` باشند. این کارایی را افزایش می‌دهد، چون از تخصیص حافظه اضافی برای آرایه جلوگیری می‌کند. 🚀

‏مزیت: کاهش سربار حافظه و بهبود عملکرد در عملیات مبتنی بر بازه. 👌

https://t.me/csharp7
‏یه روش خفن برای ساخت Set تو پایتون: Set Comprehension! 😎

‏فرض کن یه لیست داری و میخوای فقط اعداد مثبتش رو به یه Set تبدیل کنی:

```python
numbers = [-2, -1, 0, 1, 2, 3]
positive_set = {x for x in numbers if x > 0}
‏print(positive_set) # خروجی: {1, 2, 3}
```

‏خیلی شیک و مجلسی! دیگه نیازی به for loop های طولانی نیست. 😉
#پایتون #آموزش #set

https://t.me/python7ir
💡 نکته #NoSQL

🟣 موضوع : ‏تفاوت Tuning در NoSQL و SQL

نکته :

‏تو NoSQL، قضیه فرق داره. اینجا بیشتر روی طراحی دیتا مدل، استراتژی شاردینگ (تقسیم داده) و الگوی خوندن و نوشتن تمرکز می‌کنی. 🏗️🚀


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

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

آدرس کانال اصلی :
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
‏در C#، متدهای استاتیک فقط می‌توانند به اعضای استاتیک (فیلدها و متدهای استاتیک) دیگر دسترسی داشته باشند. این به این دلیل است که متدهای استاتیک به یک نمونه (instance) خاص از کلاس تعلق ندارند و در زمان اجرای برنامه، در دسترس هستند.

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

public class MyClass
{
public static int staticField = 10;

public static void StaticMethod()
{
‏ Console.WriteLine(staticField); // دسترسی مستقیم به فیلد استاتیک
}
}


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

public class AnotherClass
{
public static void AnotherStaticMethod()
{
Console.WriteLine("This is another static method.");
}

public static void CallingMethod()
{
‏ AnotherClass.AnotherStaticMethod(); // فراخوانی متد استاتیک از کلاس دیگر
}
}




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

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

‏مثال:
void Greet(string name, string greeting = "Hello")
{
Console.WriteLine($"{greeting}, {name}!");
}

‏// فراخوانی با استفاده از مقدار پیش‌فرض
‏Greet("Alice"); // خروجی: Hello, Alice!

‏// فراخوانی با تعیین مقدار برای پارامتر اختیاری
‏Greet("Bob", "Hi"); // خروجی: Hi, Bob!


‏این قابلیت خوانایی کد را افزایش داده و انعطاف‌پذیری بیشتری در استفاده از متدها فراهم می‌کند. 🌍

https://t.me/csharp7
‏FrozenDictionary و FrozenSet در C# 🧊 بهینه‌سازی مصرف حافظه و سرعت دسترسی را هدف دارند.

‏این کالکشن‌های غیرقابل تغییر (Immutable) برای سناریوهایی که داده‌ها یک بار مقداردهی شده و سپس فقط خوانده می‌شوند، ایده‌آل هستند. 🚀

‏با فریز کردن، ساختار داده بهینه‌تر شده و جستجوها سریع‌تر انجام می‌شوند. این ویژگی در نسخه‌های جدیدتر .NET اضافه شده است.

https://t.me/csharp7