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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در زبان 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
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏کاربرد توابع بازگشتی در حل مسائل ریاضی: مثال‌های کاربردی

🟢 سوال :

‏تابع بازگشتی برای محاسبه توان یک عدد صحیح مثبت ($a^b$) چگونه می‌تواند تعریف شود؟

گزینه ۱:
‏`power(a, b) = a * power(a, b+1)` با حالت پایه `power(a, 0) = 1`

گزینه ۲:
‏`power(a, b) = power(a, b-1) / a` با حالت پایه `power(a, 0) = 1`

گزینه ۳:
‏`power(a, b) = a * power(a, b-1)` با حالت پایه `power(a, 0) = 1`

گزینه ۴:
‏`power(a, b) = b * power(a, b-1)` با حالت پایه `power(a, 1) = a`



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

🟢 توضیح :

‏توان $a^b$ می‌تواند به صورت بازگشتی تعریف شود: اگر $b=0$، نتیجه 1 است؛ در غیر این صورت، $a^b = a \times a^{b-1}$.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏عملگر `!` در C# برای نادیده گرفتن "nullable" بودن یک متغیر استفاده میشه.

⚠️ اما حواستون باشه، اگه متغیری که با `!` بهش اشاره می‌کنید واقعاً null باشه، موقع اجرا با خطا مواجه میشید.

پس فقط وقتی مطمئن هستید متغیر null نیست ازش استفاده کنید.

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

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

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

🟣 موضوع : ‏پردازش داده‌های XML با XmlDocument

🟢 سوال :

‏کدام یک از موارد زیر یک مثال از کاربرد XmlDocument است؟

گزینه ۱:
‏مدیریت حافظه

گزینه ۲:
‏پردازش فایل‌های XML پیکربندی

گزینه ۳:
‏محاسبات ریاضی پیچیده

گزینه ۴:
‏ایجاد انیمیشن‌های گرافیکی

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

🟢 توضیح :

‏پردازش فایل‌های XML پیکربندی، یک مثال از کاربرد XmlDocument است.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏unsafe context در C# به شما اجازه می‌ده stackalloc کنید.

‏stackalloc یک بلاک حافظه رو روی stack اختصاص میده. بر خلاف new، حافظه با اتمام scope آزاد میشه و نیازی به garbage collection نیست. 🚀

```csharp
Span<int> numbers = stackalloc int[10];
```

‏دقت کنید که استفاده بیش از حد از stackalloc باعث stack overflow میشه. 💥 مراقب حجم allocation باشید!

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
‏سیاست نسخه‌بندی دات‌نت از سال ۲۰۲۶ تغییر می‌کند. 🗓️

‏از این پس، نسخه‌های LTS (پشتیبانی بلند مدت) هر سه سال یک‌بار منتشر می‌شوند. نسخه‌های STS (پشتیبانی استاندارد) نیز هر ۱۸ ماه یک‌بار عرضه خواهند شد. ♻️

‏این تغییرات به منظور ارائه یک برنامه زمانی قابل پیش‌بینی‌تر و تسهیل برنامه‌ریزی برای توسعه‌دهندگان اعمال می‌شود. 👨‍💻

https://t.me/dotnet7ir
‏در WPF، اعتبارسنجی داده‌ها در اتصال داده (Data Binding) به طور مستقیم از طریق ویژگی ValidatesOnDataErrors در Binding انجام می‌شود. این ویژگی به شما امکان می‌دهد تا از کلاس‌های پیاده‌سازی‌کننده رابط IDataErrorInfo یا INotifyDataErrorInfo برای تعریف قوانین اعتبارسنجی استفاده کنید.

‏وقتی ValidatesOnDataErrors روی True تنظیم شود، WPF به طور خودکار هنگام تغییر مقدار یک خصوصیت متصل شده، اعتبارسنجی را انجام می‌دهد. در صورت بروز خطا، می‌توانید با استفاده از کنترل‌های Validation.ErrorTemplate، پیام خطا را به کاربر نمایش دهید.

‏مثال ساده‌ای از استفاده از IDataErrorInfo:

public class MyDataModel : IDataErrorInfo
{
public string Name { get; set; }

‏ public string Error => null; // یا تعریف خطای کلی

public string this[string columnName]
{
get
{
string error = null;
switch (columnName)
{
case "Name":
if (string.IsNullOrEmpty(Name))
{


// ...
‏متدهای نمونه (Instance Methods) در C# به متدهایی گفته می‌شود که به یک نمونه (Object) خاص از یک کلاس تعلق دارند. برای فراخوانی این متدها، ابتدا باید یک نمونه از کلاس مورد نظر ایجاد کنید و سپس با استفاده از عملگر نقطه (.) متد را روی آن نمونه فراخوانی نمایید.

‏به عنوان مثال، اگر کلاسی به نام Car داشته باشیم که دارای متد نمونه StartEngine است، نحوه ایجاد نمونه و فراخوانی متد به صورت زیر خواهد بود:

public class Car
{
public void StartEngine()
{
‏ Console.WriteLine("موتور روشن شد!");
}
}

‏// ... در جای دیگر کد ...

‏Car myCar = new Car(); // ایجاد یک نمونه از کلاس Car
‏myCar.StartEngine(); // فراخوانی متد نمونه StartEngine روی نمونه myCar


‏در این مثال، myCar یک نمونه از کلاس Car است و StartEngine() یک متد نمونه است که روی این نمونه فراخوانی می‌شود. این متدها برای دسترسی و کار با داده‌های (فیلدها و پراپرتی‌های) همان نمونه خاص طراحی شده‌اند. 🚗💡

https://t.me/csharp7