🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
Telegram
زبان
You’ve been invited to add the folder “زبان”, which includes 50 chats.
در C#، متغیرهایی که به عنوان پارامتر به یک متد (تابع) ارسال میشوند، مانند متغیرهای محلی، دارای محدوده (scope) و عمر (lifetime) مشخصی هستند.
محدوده این پارامترها فقط داخل خود متد تعریف شده است. به محض اینکه اجرای متد به پایان برسد، این پارامترها از حافظه پاک شده و دیگر قابل دسترسی نخواهند بود. این بدان معناست که شما نمیتوانید خارج از متد به مقادیر یا حتی وجود این پارامترها دسترسی داشته باشید.
این رفتار برای جلوگیری از تداخل دادهها بین بخشهای مختلف برنامه و حفظ نظم در اجرای کد بسیار حیاتی است. 💡
این اصل، مدیریت حافظه و جلوگیری از خطاهای احتمالی را در برنامههای پیچیده C# تسهیل میکند. ✅
https://t.me/csharp7
محدوده این پارامترها فقط داخل خود متد تعریف شده است. به محض اینکه اجرای متد به پایان برسد، این پارامترها از حافظه پاک شده و دیگر قابل دسترسی نخواهند بود. این بدان معناست که شما نمیتوانید خارج از متد به مقادیر یا حتی وجود این پارامترها دسترسی داشته باشید.
این رفتار برای جلوگیری از تداخل دادهها بین بخشهای مختلف برنامه و حفظ نظم در اجرای کد بسیار حیاتی است. 💡
void PrintMessage(string message) // 'message' یک پارامتر متد است
{
Console.WriteLine(message); // 'message' فقط در اینجا قابل دسترسی است
}
// در خارج از این متد، 'message' دیگر وجود ندارد.
این اصل، مدیریت حافظه و جلوگیری از خطاهای احتمالی را در برنامههای پیچیده C# تسهیل میکند. ✅
https://t.me/csharp7
در C#، انتخاب نوع مجموعه داده مناسب برای عملیات مختلف میتواند تأثیر قابل توجهی بر عملکرد داشته باشد. برای مثال، در سناریوهایی که نیاز به دسترسی مکرر به عناصر یا افزودن/حذف سریع دارید،
برای درک بهتر تفاوت عملکرد، میتوان زمانبندی اجرای عملیات مختلف مانند افزودن، حذف و پیمایش را در
https://t.me/csharp7
List<T> معمولاً انتخاب خوبی است. اما وقتی صحبت از دادههای بزرگ و عملیات موازی میشود، گزینههای دیگری نیز مطرح میشوند.
ConcurrentBag<T> یکی از این گزینههاست که برای سناریوهای چندنخی (multi-threaded) طراحی شده و امکان افزودن و حذف ایمن عناصر را بدون نیاز به قفلگذاری صریح فراهم میکند. در مقایسه با List<T> در محیطهای موازی، ConcurrentBag<T> میتواند سربار کمتری داشته باشد.برای درک بهتر تفاوت عملکرد، میتوان زمانبندی اجرای عملیات مختلف مانند افزودن، حذف و پیمایش را در
List<T> و ConcurrentBag<T> تحت بار موازی اندازهگیری کرد. نتایج معمولاً نشان میدهند که ConcurrentBag<T> در سناریوهای با دسترسی همزمان بالا، کارایی بهتری از خود نشان میدهد. 📊⏱️https://t.me/csharp7
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
Telegram
زبان
You’ve been invited to add the folder “زبان”, which includes 50 chats.
📌 در #C، کلاس `Random` دو روش برای تولید اعداد تصادفی داره.
`Random.Shared` یک نمونه استاتیک و سراسری از `Random` رو برمیگردونه که برای کل برنامه به اشتراک گذاشته میشه. این روش سریعتره و برای تولید اعداد تصادفی در threadهای مختلف مناسبه.
اما `new Random()` هر بار یک نمونه جدید از `Random` ایجاد میکنه. اگه این نمونهها خیلی سریع پشت سر هم ایجاد بشن، ممکنه اعداد تصادفی یکسانی تولید کنن. 🎲
به طور خلاصه: برای عملکرد بهتر و جلوگیری از تکرار، `Random.Shared` رو انتخاب کن. ⚙️
https://t.me/csharp7
`Random.Shared` یک نمونه استاتیک و سراسری از `Random` رو برمیگردونه که برای کل برنامه به اشتراک گذاشته میشه. این روش سریعتره و برای تولید اعداد تصادفی در threadهای مختلف مناسبه.
اما `new Random()` هر بار یک نمونه جدید از `Random` ایجاد میکنه. اگه این نمونهها خیلی سریع پشت سر هم ایجاد بشن، ممکنه اعداد تصادفی یکسانی تولید کنن. 🎲
به طور خلاصه: برای عملکرد بهتر و جلوگیری از تکرار، `Random.Shared` رو انتخاب کن. ⚙️
https://t.me/csharp7
Telegram
آموزش C# و .Net
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
🔍🧹
آنالیزورهای #C به شما کمک میکنند کدهای بهتری بنویسید. اما گاهی هشدارهای غیرضروری میدهند.
میتوانید با استفاده از فایل `.editorconfig` سطح سختگیری یک قانون (Rule) خاص را تغییر دهید. مثلاً یک هشدار را به یک پیشنهاد تبدیل کنید یا کلاً غیرفعالش کنید.
به این ترتیب، هم از مزایای آنالیز کد بهرهمند میشوید و هم از هشدارهای اضافی خلاص میشوید. 👌
https://t.me/csharp7
آنالیزورهای #C به شما کمک میکنند کدهای بهتری بنویسید. اما گاهی هشدارهای غیرضروری میدهند.
میتوانید با استفاده از فایل `.editorconfig` سطح سختگیری یک قانون (Rule) خاص را تغییر دهید. مثلاً یک هشدار را به یک پیشنهاد تبدیل کنید یا کلاً غیرفعالش کنید.
به این ترتیب، هم از مزایای آنالیز کد بهرهمند میشوید و هم از هشدارهای اضافی خلاص میشوید. 👌
https://t.me/csharp7
برای جلوگیری از حلقههای
مثال رایج، حلقههایی هستند که شمارنده آنها به جای افزایش، کاهش مییابد و شرط خروج، بزرگتر بودن از یک عدد ثابت است.
در این مثال،
یا
همیشه منطق شرط خروج حلقه را با دقت بررسی کنید. 🔄💡
https://t.me/csharp7
for بینهایت در C#، اطمینان حاصل کنید که شرط خروج حلقه در هر تکرار به سمت false شدن پیش میرود.مثال رایج، حلقههایی هستند که شمارنده آنها به جای افزایش، کاهش مییابد و شرط خروج، بزرگتر بودن از یک عدد ثابت است.
// حلقه for بینهایت
for (int i = 0; i > -10; i++)
{
// کد شما
Console.WriteLine(i);
}
در این مثال،
i همیشه بزرگتر از -10 باقی میماند. برای اصلاح، یا شرط خروج را تغییر دهید یا جهت شمارنده را معکوس کنید:// حلقه for صحیح
for (int i = 0; i < 10; i++)
{
// کد شما
Console.WriteLine(i);
}
یا
// حلقه for صحیح با شمارنده معکوس
for (int i = 0; i > -10; i--)
{
// کد شما
Console.WriteLine(i);
}
همیشه منطق شرط خروج حلقه را با دقت بررسی کنید. 🔄💡
https://t.me/csharp7
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
Telegram
زبان
You’ve been invited to add the folder “زبان”, which includes 50 chats.
در توسعه وب با ASP.NET Core، تعریف مدلهای داده (Entities) اولین گام برای تعامل با پایگاه داده است. این مدلها کلاسهایی هستند که ساختار دادههای شما را منعکس میکنند و معمولاً با جداول پایگاه داده نگاشت میشوند.
برای مثال، فرض کنید میخواهیم یک مدل برای "محصول" تعریف کنیم:
در این مثال:
`Id` به عنوان کلید اصلی (Primary Key) جدول `Products` در پایگاه داده عمل خواهد کرد.
هنگام استفاده از Entity Framework Core، این کلاسها به طور خودکار به جداول پایگاه داده نگاشت میشوند. شما میتوانید با استفاده از Data Annotations یا Fluent API، قوانین و تنظیمات بیشتری برای نگاشت و اعتبارسنجی اعمال کنید.
به عنوان مثال، برای مشخص کردن اینکه
این مدلها ستون فقرات ساختار دادهای برنامه شما را تشکیل میدهند و پایه و اساس عملیات CRUD (Create, Read, Update, Delete) را فراهم میکنند. 🏗️📊
با تعریف صحیح این مدلها، فرآیند توسعه و مدیریت دادهها بسیار سادهتر و سازمانیافتهتر خواهد شد. ✨
https://t.me/csharp7
برای مثال، فرض کنید میخواهیم یک مدل برای "محصول" تعریف کنیم:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Description { get; set; }
}
در این مثال:
`Id` به عنوان کلید اصلی (Primary Key) جدول `Products` در پایگاه داده عمل خواهد کرد.
Name، Price و Description ستونهای دیگر جدول را نشان میدهند.هنگام استفاده از Entity Framework Core، این کلاسها به طور خودکار به جداول پایگاه داده نگاشت میشوند. شما میتوانید با استفاده از Data Annotations یا Fluent API، قوانین و تنظیمات بیشتری برای نگاشت و اعتبارسنجی اعمال کنید.
به عنوان مثال، برای مشخص کردن اینکه
Id یک کلید اصلی است و نیاز به تولید خودکار مقدار دارد، نیازی به کد اضافی در این حالت نیست، زیرا Entity Framework Core به طور پیشفرض آن را تشخیص میدهد. اما برای فیلدهایی که نیاز به محدودیت دارند، میتوان از Data Annotations استفاده کرد:using System.ComponentModel.DataAnnotations;
public class Product
{
public int Id { get; set; }
[Required] // این فیلد نباید خالی باشد
[StringLength(100)] // حداکثر طول رشته 100 کاراکتر است
public string Name { get; set; }
[Range(0.01, 10000.00)] // قیمت باید بین 0.01 و 10000.00 باشد
public decimal Price { get; set; }
public string Description { get; set; }
}
این مدلها ستون فقرات ساختار دادهای برنامه شما را تشکیل میدهند و پایه و اساس عملیات CRUD (Create, Read, Update, Delete) را فراهم میکنند. 🏗️📊
با تعریف صحیح این مدلها، فرآیند توسعه و مدیریت دادهها بسیار سادهتر و سازمانیافتهتر خواهد شد. ✨
https://t.me/csharp7
Telegram
آموزش C# و .Net
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 آموزش گیت (Git) - Stashing
🟢 کیفیت : متوسط
🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.
🟣 آموزش گیت (Git)
🟢 زبان آموزش: فارسی
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لطفا ما رو به دیگران هم معرفی کنید...
آدرس کانال اصلی :
https://t.me/Tu_24
آدرس وبسایت:
https://Tutorial24.ir
🟢 کیفیت : متوسط
🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.
🟣 آموزش گیت (Git)
🟢 زبان آموزش: فارسی
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لطفا ما رو به دیگران هم معرفی کنید...
آدرس کانال اصلی :
https://t.me/Tu_24
آدرس وبسایت:
https://Tutorial24.ir
حلقههای
مثال سادهای از استفاده از دو شمارنده در حلقه
در این مثال،
https://t.me/csharp7
for در C# قابلیت انعطافپذیری بالایی دارند و میتوانند با استفاده از شمارندههای دوگانه، شروط پیچیدهتری را مدیریت کنند. این تکنیک به شما اجازه میدهد تا همزمان دو متغیر را در حلقه کنترل کنید، که برای سناریوهایی مانند پیمایش یک آرایه از ابتدا به انتها و همزمان از انتها به ابتدا، یا مقایسه عناصر با فواصل مختلف، بسیار مفید است.مثال سادهای از استفاده از دو شمارنده در حلقه
for:for (int i = 0, j = 10; i < j; i++, j--)
{
Console.WriteLine($"i: {i}, j: {j}");
}
در این مثال،
i از صفر شروع شده و افزایش مییابد، در حالی که j از ده شروع شده و کاهش مییابد. حلقه تا زمانی که i کوچکتر از j باشد ادامه پیدا میکند. این روش امکان پیادهسازی الگوریتمهای کارآمدی مانند جستجوی دو طرفه یا مرتبسازیهای خاص را فراهم میسازد. 💡⚙️https://t.me/csharp7
در ASP.NET Core، صفات (Attributes) ابزاری قدرتمند برای اعمال مجوزدهی (Authorization) در سطح کنترلرها و اکشنها هستند. با استفاده از صفت
برای مثال، اگر میخواهید یک اکشن فقط برای کاربران احراز هویت شده (Authenticated) قابل دسترسی باشد، کافیست صفت
همچنین میتوانید با مشخص کردن نقشها یا سیاستهای مجوزدهی، دسترسی را دقیقتر کنترل کنید. برای مثال، برای محدود کردن دسترسی به کاربران با نقش "Admin":
یا با استفاده از سیاستهای مجوزدهی تعریف شده در
این صفات به طور خودکار قبل از اجرای اکشن، منطق مجوزدهی را اجرا میکنند و در صورت عدم موفقیت، پاسخ مناسب (معمولاً 401 Unauthorized یا 403 Forbidden) را برمیگردانند. 🛡️🔒✨
https://t.me/csharp7
[Authorize]، میتوانید دسترسی به بخشهای مختلف برنامه خود را محدود کنید.برای مثال، اگر میخواهید یک اکشن فقط برای کاربران احراز هویت شده (Authenticated) قابل دسترسی باشد، کافیست صفت
[Authorize] را بالای آن قرار دهید:[HttpGet]
[Authorize]
public IActionResult MySecureAction()
{
return Ok("This is a secure action.");
}
همچنین میتوانید با مشخص کردن نقشها یا سیاستهای مجوزدهی، دسترسی را دقیقتر کنترل کنید. برای مثال، برای محدود کردن دسترسی به کاربران با نقش "Admin":
[HttpGet]
[Authorize(Roles = "Admin")]
public IActionResult AdminAction()
{
return Ok("This action is only for Admins.");
}
یا با استفاده از سیاستهای مجوزدهی تعریف شده در
Startup.cs:[HttpGet]
[Authorize(Policy = "RequireElevatedPrivileges")]
public IActionResult ElevatedAction()
{
return Ok("This action requires elevated privileges.");
}
این صفات به طور خودکار قبل از اجرای اکشن، منطق مجوزدهی را اجرا میکنند و در صورت عدم موفقیت، پاسخ مناسب (معمولاً 401 Unauthorized یا 403 Forbidden) را برمیگردانند. 🛡️🔒✨
https://t.me/csharp7
Telegram
آموزش C# و .Net
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
Telegram
زبان
You’ve been invited to add the folder “زبان”, which includes 50 chats.
در #C شارپ، `ISourceGenerator` و `IIncrementalGenerator` هر دو برای تولید کد در زمان کامپایل استفاده میشوند. ⚙️
تفاوت کلیدی این است که `IIncrementalGenerator` خروجی را بهصورت افزایشی (incremental) تولید میکند. این یعنی فقط زمانی دوباره اجرا میشود که ورودیها تغییر کرده باشند، در نتیجه سرعت کامپایل افزایش مییابد. 🚀
`ISourceGenerator` در هر بار کامپایل از نو اجرا میشود. 🔄
https://t.me/csharp7
تفاوت کلیدی این است که `IIncrementalGenerator` خروجی را بهصورت افزایشی (incremental) تولید میکند. این یعنی فقط زمانی دوباره اجرا میشود که ورودیها تغییر کرده باشند، در نتیجه سرعت کامپایل افزایش مییابد. 🚀
`ISourceGenerator` در هر بار کامپایل از نو اجرا میشود. 🔄
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
🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...
عضو لیست جامع شوید:
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
Telegram
برنامه نویسی
You’ve been invited to add the folder “برنامه نویسی”, which includes 55 chats.
حلقه
برای مثال، اگر بخواهید تمام کاراکترهای یک رشته را تا زمانی که به کاراکتر خاصی (مانند نقطه) نرسیدهاید، بخوانید، میتوانید از
این روش به شما امکان میدهد تا به صورت پویا با دادههای متنی کار کرده و عملیات را بر اساس شرایط در حال تغییر انجام دهید. 🧐✨
https://t.me/csharp7
while در C# ابزاری قدرتمند برای تکرار عملیات تا زمانی که شرط مشخصی برقرار باشد، است. این حلقه به ویژه در پردازش رشتهها و کاراکترها کاربرد فراوانی دارد.برای مثال، اگر بخواهید تمام کاراکترهای یک رشته را تا زمانی که به کاراکتر خاصی (مانند نقطه) نرسیدهاید، بخوانید، میتوانید از
while استفاده کنید:string text = "این یک مثال است. پایان.";
int index = 0;
while (index < text.Length && text[index] != '.')
{
Console.Write(text[index]);
index++;
}
// خروجی: این یک مثال است
این روش به شما امکان میدهد تا به صورت پویا با دادههای متنی کار کرده و عملیات را بر اساس شرایط در حال تغییر انجام دهید. 🧐✨
https://t.me/csharp7
در C#، اعضای یک کلاس (متغیرها و متدها) دارای محدوده دسترسی مشخصی هستند که تعیین میکند از کجا قابل دسترسی باشند. این محدوده دسترسی با استفاده از کلمات کلیدی مانند
`public`: اعضای `public` از هر کجای برنامه قابل دسترسی هستند.
`protected`: اعضای `protected` در داخل همان کلاس و همچنین در کلاسهای مشتق شده (کلاسهایی که از این کلاس ارث میبرند) قابل دسترسی هستند.
برای دسترسی به اعضای یک کلاس از خارج آن کلاس، ابتدا باید یک شیء (Object) از آن کلاس ایجاد کنید. سپس با استفاده از عملگر نقطه (
به عنوان مثال:
دسترسی به اعضای کلاس، کپسولهسازی (Encapsulation) را تضمین میکند و به شما اجازه میدهد تا جزئیات پیادهسازی را از دید کاربران کلاس پنهان نگه دارید. 🔒 encapsulation 캡슐화
https://t.me/csharp7
public، private، protected و internal مشخص میشود. `public`: اعضای `public` از هر کجای برنامه قابل دسترسی هستند.
private: اعضای private فقط در داخل همان کلاسی که تعریف شدهاند، قابل دسترسی هستند. این نوع دسترسی پیشفرض برای اعضای کلاس است. `protected`: اعضای `protected` در داخل همان کلاس و همچنین در کلاسهای مشتق شده (کلاسهایی که از این کلاس ارث میبرند) قابل دسترسی هستند.
internal: اعضای internal فقط در داخل همان اسمبلی (پروژه) که تعریف شدهاند، قابل دسترسی هستند.برای دسترسی به اعضای یک کلاس از خارج آن کلاس، ابتدا باید یک شیء (Object) از آن کلاس ایجاد کنید. سپس با استفاده از عملگر نقطه (
.) میتوانید به اعضای public آن شیء دسترسی پیدا کنید.به عنوان مثال:
public class MyClass
{
public int publicVariable = 10;
private string privateVariable = "Hello";
public void PublicMethod()
{
Console.WriteLine("This is a public method.");
PrivateMethod(); // دسترسی به متد private از داخل کلاس مجاز است
}
private void PrivateMethod()
{
Console.WriteLine("This is a private method.");
}
}
// در جای دیگر از برنامه:
MyClass myObject = new MyClass();
Console.WriteLine(myObject.publicVariable); // دسترسی مجاز به متغیر public
myObject.PublicMethod(); // دسترسی مجاز به متد public
// Console.WriteLine(myObject.privateVariable); // خطا: دسترسی مجاز نیست
// myObject.PrivateMethod(); // خطا: دسترسی مجاز نیست
دسترسی به اعضای کلاس، کپسولهسازی (Encapsulation) را تضمین میکند و به شما اجازه میدهد تا جزئیات پیادهسازی را از دید کاربران کلاس پنهان نگه دارید. 🔒 encapsulation 캡슐화
https://t.me/csharp7
Telegram
آموزش C# و .Net
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
شامل موضوعات آموزشی زیر:
توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی
با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
شامل موضوعات آموزشی زیر:
توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی
با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
Telegram
موفقیت
You’ve been invited to add the folder “موفقیت”, which includes 26 chats.
گاهی در مدیریت خطا، نیاز داریم استثنایی را که دریافت کردهایم، دوباره پرتاب کنیم. این کار به لایههای بالاتر برنامه اجازه میدهد تا استثنا را مدیریت کنند یا اطلاعات بیشتری به آن اضافه کنند.
سناریوی ۱: پرتاب مجدد استثنا با حفظ اطلاعات اصلی
فرض کنید تابعی داریم که دادهای را از فایل میخواند و در صورت بروز خطا در خواندن فایل، استثنایی پرتاب میکند. اگر این تابع بخواهد استثنا را دوباره پرتاب کند، میتواند از
سناریوی ۲: پرتاب مجدد استثنا با اضافه کردن اطلاعات جدید (Wrapper Exception)
در برخی موارد، ممکن است بخواهیم استثنای اصلی را درون یک استثنای جدید پرتاب کنیم. این کار به ما امکان میدهد تا زمینه بیشتری را فراهم کنیم یا نوع استثنا را برای مدیریت بهتر تغییر دهیم.
در این مثال،
https://t.me/csharp7
سناریوی ۱: پرتاب مجدد استثنا با حفظ اطلاعات اصلی
فرض کنید تابعی داریم که دادهای را از فایل میخواند و در صورت بروز خطا در خواندن فایل، استثنایی پرتاب میکند. اگر این تابع بخواهد استثنا را دوباره پرتاب کند، میتواند از
throw; استفاده کند. این دستور استثنای فعلی را بدون تغییر به لایههای بالاتر منتقل میکند.public void ReadDataFromFile(string filePath)
{
try
{
// منطق خواندن داده از فایل
// ...
if (/* خطایی در خواندن رخ داده */)
{
throw new IOException("خطا در خواندن فایل.");
}
}
catch (IOException ex)
{
// لاگ کردن خطا یا انجام عملیات دیگر
Console.WriteLine($"خطا در ReadDataFromFile: {ex.Message}");
throw; // پرتاب مجدد استثنای اصلی
}
}
سناریوی ۲: پرتاب مجدد استثنا با اضافه کردن اطلاعات جدید (Wrapper Exception)
در برخی موارد، ممکن است بخواهیم استثنای اصلی را درون یک استثنای جدید پرتاب کنیم. این کار به ما امکان میدهد تا زمینه بیشتری را فراهم کنیم یا نوع استثنا را برای مدیریت بهتر تغییر دهیم.
public void ProcessUserData(int userId)
{
try
{
// منطق پردازش داده کاربر
// ...
if (/* خطایی در پردازش رخ داده */)
{
throw new InvalidOperationException("داده کاربر نامعتبر است.");
}
}
catch (InvalidOperationException ex)
{
// پرتاب استثنای جدید با ارجاع به استثنای اصلی
throw new UserProcessingException($"خطا در پردازش کاربر با شناسه {userId}.", ex);
}
}
public class UserProcessingException : Exception
{
public UserProcessingException(string message, Exception innerException) : base(message, innerException)
{
}
}
در این مثال،
UserProcessingException استثنای اصلی InvalidOperationException را در خود جای داده و اطلاعات مربوط به شناسه کاربر را نیز اضافه کرده است. این به لایههای بالاتر کمک میکند تا هم خطای اصلی را بفهمند و هم زمینه وقوع آن را. 📂⚙️https://t.me/csharp7
Telegram
آموزش C# و .Net
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
https://t.me/+w-o6dHW5O31jMWNk
آیدی ادمین:
@ma_limbs
🔵 کوییز #سی_شارپ
🟣 موضوع : ویژگیهای جدید در C#
🟢 سوال :
کدام یک از موارد زیر یک ویژگی جدید در C# برای کار با توابع بازگشتی است؟
گزینه ۱:
حلقههای for
گزینه ۲:
دستورات switch
گزینه ۳:
Tail-Call Optimization
گزینه ۴:
کلاسهای generic
🔵 گزینه صحیح:3
🟢 توضیح :
Tail-Call Optimization یک ویژگی جدید در C# برای بهینهسازی توابع بازگشتی است.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لطفا ما رو به دیگران هم معرفی کنید...
آدرس کانال اصلی :
https://t.me/Tu_24
آدرس وبسایت:
https://Tutorial24.ir
🟣 موضوع : ویژگیهای جدید در C#
🟢 سوال :
کدام یک از موارد زیر یک ویژگی جدید در C# برای کار با توابع بازگشتی است؟
گزینه ۱:
حلقههای for
گزینه ۲:
دستورات switch
گزینه ۳:
Tail-Call Optimization
گزینه ۴:
کلاسهای generic
🔵 گزینه صحیح:
🟢 توضیح :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لطفا ما رو به دیگران هم معرفی کنید...
آدرس کانال اصلی :
https://t.me/Tu_24
آدرس وبسایت:
https://Tutorial24.ir
Telegram
آموزش کامپیوتر و برنامه نویسی tu24
* برنامه نویسی
* علوم کامپیوتر
* ریاضیات مورد نیاز علوم کامپیوتر
* هوش مصنوعی
* علوم داده
* داده کاوی
* بیگ دیتا
* پیشنهادات، تبلیغات و تبادل و ... : @ma_limbs
* تعرفه تبلیغات:
https://t.me/+w-o6dHW5O31jMWNk
* علوم کامپیوتر
* ریاضیات مورد نیاز علوم کامپیوتر
* هوش مصنوعی
* علوم داده
* داده کاوی
* بیگ دیتا
* پیشنهادات، تبلیغات و تبادل و ... : @ma_limbs
* تعرفه تبلیغات:
https://t.me/+w-o6dHW5O31jMWNk
❤1
ویژگی جالب C# 11:
از این پس اینترفیسها میتوانند اعضای `abstract static` داشته باشند. یعنی میتوان یک قرارداد برای پیادهسازی متدهای `static` در کلاسهایی که آن اینترفیس را پیادهسازی میکنند، تعریف کرد.
این قابلیت، امکان ایجاد الگوهای طراحی منعطفتری را فراهم میکند. ⚙️
به عنوان مثال، میتوان یک اینترفیس برای کارخانههای تولید اشیا تعریف کرد و هر کلاس، پیادهسازی خاص خود را از متد `static` تولید شی ارائه دهد. 🏭
همچنین، این ویژگی به generic math نیز کمک شایانی میکند. ➕
https://t.me/csharp7
از این پس اینترفیسها میتوانند اعضای `abstract static` داشته باشند. یعنی میتوان یک قرارداد برای پیادهسازی متدهای `static` در کلاسهایی که آن اینترفیس را پیادهسازی میکنند، تعریف کرد.
این قابلیت، امکان ایجاد الگوهای طراحی منعطفتری را فراهم میکند. ⚙️
به عنوان مثال، میتوان یک اینترفیس برای کارخانههای تولید اشیا تعریف کرد و هر کلاس، پیادهسازی خاص خود را از متد `static` تولید شی ارائه دهد. 🏭
همچنین، این ویژگی به generic math نیز کمک شایانی میکند. ➕
https://t.me/csharp7