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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در 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
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
SortedList<TKey, TValue> و SortedDictionary<TKey, TValue> در C# برای مدیریت مجموعه‌ای از جفت‌های کلید-مقدار طراحی شده‌اند که به طور خودکار بر اساس کلید مرتب می‌شوند.

SortedList داده‌ها را در دو آرایه جداگانه ذخیره می‌کند: یکی برای کلیدها و دیگری برای مقادیر. این ساختار برای دسترسی سریع به عناصر بر اساس ایندکس (موقعیت) مناسب است، اما درج و حذف عناصر ممکن است کندتر باشد زیرا نیاز به جابجایی در آرایه‌ها دارد.

SortedDictionary از ساختار درختی (معمولاً درخت جستجوی دودویی متوازن) برای ذخیره‌سازی داده‌ها استفاده می‌کند. این ساختار درج و حذف سریع‌تری را فراهم می‌کند و همچنین جستجو بر اساس کلید بسیار بهینه است، اما دسترسی مستقیم بر اساس ایندکس به اندازه SortedList سریع نیست.

‏هر دو مجموعه برای سناریوهایی ایده‌آل هستند که حفظ ترتیب عناصر بر اساس کلید اهمیت دارد و نیاز به جستجو، درج و حذف کارآمد وجود دارد.

‏مثال ساده از SortedDictionary:
using System.Collections.Generic;

// ...

var sortedDict = new SortedDictionary<int, string>();
sortedDict.Add(3, "Apple");
sortedDict.Add(1, "Banana");
‏در توسعه اپلیکیشن‌های دسکتاپ با C# و فریم‌ورک‌هایی مانند WPF یا WinForms، استفاده از نقاط شکست (Breakpoints) و مشاهده مقادیر متغیرها یکی از ضروری‌ترین ابزارها برای اشکال‌زدایی (Debugging) است.

‏هنگامی که در Visual Studio، یک نقطه شکست روی یک خط کد تنظیم می‌کنید (با کلیک کردن در کنار شماره خط)، اجرای برنامه در آن نقطه متوقف می‌شود. این امکان به شما می‌دهد تا وضعیت برنامه را در لحظه بررسی کنید.

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

‏پس از توقف برنامه در نقطه شکست، پنجره‌هایی مانند Locals، Autos و Watch به شما امکان مشاهده مقادیر فعلی متغیرها را می‌دهند.

‏- Locals: مقادیر متغیرهایی که در محدوده فعلی (scope) قرار دارند را نمایش می‌دهد.
‏- Autos: به طور خودکار متغیرهایی که در خط فعلی و خط قبلی استفاده شده‌اند را نمایش می‌دهد.
‏- Watch: شما می‌توانید متغیرها یا عبارات خاصی را که می‌خواهید پیگیری کنید، به این پنجره اضافه کنید.

‏این قابلیت‌ها به شما کمک می‌کنند تا منطق برنامه را بهتر درک کرده و مشکلات احتمالی را سریع‌تر شناسایی و رفع کنید. 🛠️🔍💡

https://t.me/csharp7
‏قابلیت Compile-time reflection در C#‎ محدوده! 🧐

‏برخلاف reflection در زمان اجرا (Runtime)، در زمان کامپایل (Compile-time) فقط به متادیتاهای در دسترس در همان زمان دسترسی داری. یعنی نمیشه اطلاعات اسمبلی‌های خارجی رو بررسی کرد.

‏این محدودیت به دلایل بهینه‌سازی و جلوگیری از پیچیدگی‌های غیرضروری در فرآیند کامپایل اعمال شده. ⚙️

‏به عبارت دیگه، Compile-time reflection بیشتر برای بررسی attributeها و انواع داده در کد فعلی کاربرد داره. 💡

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏تفکیک و جداسازی کد: اصول Refactoring برای بهبود ساختار کد

🟢 سوال :

‏هدف اصلی از بازسازی کد (Refactoring) چیست؟

گزینه ۱:
‏افزودن ویژگی‌های جدید به نرم‌افزار

گزینه ۲:
‏رفع باگ‌های موجود در نرم‌افزار

گزینه ۳:
‏بهبود ساختار، خوانایی و قابلیت نگهداری کد بدون تغییر رفتار آن

گزینه ۴:
‏بهینه‌سازی عملکرد کد برای سرعت بیشتر



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

🟢 توضیح :

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

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #HTML

🟣 موضوع : ‏کار با تگ‌های video و audio برای مدیا

🟢 سوال :

‏کدام تگ HTML5 برای افزودن زیرنویس‌ها، شرح‌ها یا سایر داده‌های متنی زمان‌بندی شده به عناصر <video> و <audio> استفاده می‌شود؟

گزینه ۱:
<source>

گزینه ۲:
<track>

گزینه ۳:
‏<caption> (مربوط به جداول)

گزینه ۴:
‏<text> (غیر استاندارد)



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

🟢 توضیح :

‏تگ <track> درون تگ‌های <video> یا <audio> برای افزودن فایل‌های متنی زمان‌بندی شده (با فرمت WebVTT یا TextTrack API) برای زیرنویس‌ها، شرح‌ها، کپشن‌ها یا سایر فراداده‌های مرتبط با زمان پخش استفاده می‌شود.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، برای ذخیره‌سازی و بازیابی داده‌ها از فایل‌ها، فرمت‌های مختلفی برای سریال‌سازی وجود دارد که هر کدام مزایا و معایب خود را دارند.

JSON (JavaScript Object Notation):
‏یکی از رایج‌ترین فرمت‌هاست. خوانایی بالایی برای انسان دارد و برای تبادل داده بین سرویس‌های وب بسیار محبوب است. حجم آن نسبتاً کم است، اما ممکن است به اندازه فرمت‌های باینری بهینه نباشد.

XML (Extensible Markup Language):
‏یک فرمت قدیمی‌تر و بسیار انعطاف‌پذیر است. مانند JSON، خوانایی خوبی دارد اما معمولاً حجم بیشتری نسبت به JSON دارد. برای داده‌های ساختاریافته پیچیده مناسب است.

‏فرمت باینری:
‏این فرمت داده‌ها را به صورت مستقیم در حافظه ذخیره می‌کند و نیازی به تبدیل به فرمت متنی ندارد. در نتیجه، سرعت سریال‌سازی و دی‌سریال‌سازی بسیار بالایی دارد و حجم فایل‌ها نیز معمولاً کمتر است. با این حال، خوانایی برای انسان ندارد و درک محتوای فایل باینری بدون ابزار خاص دشوار است.

‏انتخاب فرمت مناسب بستگی به نیاز شما دارد: اگر خوانایی و سهولت تبادل داده اولویت دارد، JSON یا XML گزینه‌های خوبی هستند. اگر سرعت و حجم فایل اهمیت بیشتری دارد، فرمت باینری انتخاب بهتری خواهد بود. ⚙️💾

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
خوانایی کد، کلید موفقیت برنامه‌نویسیه! 🔑

‏یادتون باشه، پایتون یه فلسفه داره: Zen of Python! 🧘‍♂️

‏کافیه تو کنسول پایتون بنویسید `import this` تا با اصولش آشنا بشید.

‏کد تمیزتر = اشکال‌یابی آسون‌تر + همکاری بهتر! 👌

https://t.me/python7ir
‏قابلیت جالب `String.Create` در C#‎ 🚀

‏این متد به شما اجازه میده یه رشته رو مستقیماً از یه اسپَن (Span) از کاراکترها بسازید. اینطوری دیگه نیازی به تخصیص حافظه اضافی و کپی کردن اطلاعات ندارید. 👌

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

https://t.me/csharp7
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏تعاریف مربوط به چرخه عمر توسعه نرم‌افزار: مراحل تحلیل، طراحی، پیاده‌سازی و تست

🟢 سوال :

‏اولین مرحله در چرخه عمر توسعه نرم‌افزار (SDLC) چیست؟

گزینه ۱:
‏پیاده‌سازی (Implementation)

گزینه ۲:
‏طراحی (Design)

گزینه ۳:
‏تحلیل (Analysis)

گزینه ۴:
‏تست (Testing)



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

🟢 توضیح :

‏مرحله تحلیل (Analysis) اولین گام در SDLC است که در آن نیازمندی‌های کاربر و سیستم به طور دقیق جمع‌آوری و مستند می‌شوند. هدف درک کامل مسئله‌ای است که نرم‌افزار باید حل کند.

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

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

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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏برای مدیریت امن داده‌های حساس در پایگاه داده با C#، هنگام حذف یا به‌روزرسانی رکوردها، از روش‌های پارامتریک (Parameterized Queries) استفاده کنید. این روش از تزریق SQL جلوگیری کرده و اطمینان حاصل می‌کند که فقط داده‌های مورد نظر تحت تأثیر قرار می‌گیرند.

‏به جای ساختن مستقیم رشته SQL، از پارامترها استفاده کنید:

‏// فرض کنید connection و command آماده هستند
command.CommandText = "DELETE FROM SensitiveData WHERE Id = @Id";
command.Parameters.AddWithValue("@Id", sensitiveDataId);
command.ExecuteNonQuery();


‏استفاده از AddWithValue یا Add با مشخص کردن نوع داده، امنیت را به طور قابل توجهی افزایش می‌دهد. این رویکرد تضمین می‌کند که ورودی کاربر به عنوان داده در نظر گرفته می‌شود، نه بخشی از دستور SQL. 🛡️🔒

https://t.me/csharp7
‏در C#، هنگام مدیریت استثناها، دو روش برای پرتاب مجدد استثنا وجود دارد: throw new Exception() و throw;.

‏استفاده از throw; توصیه می‌شود زیرا استثنای اصلی را با حفظ traceback کامل آن پرتاب می‌کند. این به شما امکان می‌دهد تا منبع دقیق خطا را در زمان اشکال‌زدایی پیدا کنید.

‏در مقابل، throw new Exception() یک استثنای جدید ایجاد می‌کند که traceback اصلی را از بین می‌برد و ردیابی خطا را دشوارتر می‌سازد.

‏مثال:

try
{
‏ // کدی که ممکن است استثنا ایجاد کند
‏ throw new ArgumentException("پارامتر نامعتبر");
}
catch (ArgumentException ex)
{
‏ // روش اول: استفاده از throw; (توصیه شده)
throw;

‏ // روش دوم: استفاده از throw new Exception() (توصیه نمی‌شود)
‏ // throw new Exception("خطایی رخ داده است", ex);
}


‏استفاده صحیح از throw; به حفظ شفافیت در گزارش خطاها کمک می‌کند. 🔍

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

🟣 موضوع : ‏کار با Tupleها در C#

🟢 سوال :

‏Tuple چیست؟

گزینه ۱:
‏یک نوع آرایه ثابت

گزینه ۲:
‏یک نوع داده برای تعریف چند مقدار با نام‌های دلخواه

گزینه ۳:
‏یک دیکشنری ثابت

گزینه ۴:
‏یک کلاس برای مدیریت رویدادها

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

🟢 توضیح :

‏Tuple یک نوع داده برای تعریف چند مقدار با نام‌های دلخواه است.

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

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

آدرس کانال اصلی :
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
‏استفاده از `ValueTask` در C# برای بهبود کارایی عملیات غیرهمزمان رایج است. 💡 اما حواستان به این نکته باشد: `ValueTask` فقط یک بار قابل `await` شدن است. استفاده مجدد از آن می‌تواند منجر به خطا شود.

‏بهترین شیوه: اگر احتمال استفاده مجدد از نتیجه عملیات غیرهمزمان وجود دارد، از `.AsTask()` برای تبدیل `ValueTask` به `Task` استفاده کنید. این کار از بروز مشکلات احتمالی جلوگیری می‌کند. ⚙️

https://t.me/csharp7
‏در C#، کالکشن‌ها (Collections) ساختارهای داده‌ای انعطاف‌پذیرتر و قدرتمندتری نسبت به آرایه‌ها (Arrays) هستند.

‏آرایه‌ها دارای اندازه ثابت هستند و پس از تعریف، نمی‌توان تعداد عناصر آن را تغییر داد. همچنین، آرایه‌ها فقط می‌توانند یک نوع داده مشخص را در خود ذخیره کنند.

‏کالکشن‌ها، که عمدتاً در فضای نام System.Collections و System.Collections.Generic قرار دارند، امکاناتی مانند تغییر اندازه پویا، اضافه کردن و حذف آسان عناصر، و پشتیبانی از انواع داده‌های مختلف (در کالکشن‌های جنریک) را فراهم می‌کنند.

‏برخی از انواع رایج کالکشن‌ها عبارتند از:
‏- List<T>: لیستی پویا که امکان افزودن، حذف و دسترسی به عناصر را فراهم می‌کند.
‏- Dictionary<TKey, TValue>: مجموعه‌ای از جفت‌های کلید-مقدار که دسترسی سریع به مقادیر بر اساس کلید را ممکن می‌سازد.
‏- HashSet<T>: مجموعه‌ای که فقط مقادیر منحصر به فرد را ذخیره می‌کند و از تکرار جلوگیری می‌کند.

‏استفاده از کالکشن‌ها معمولاً کدنویسی را ساده‌تر و خواناتر می‌کند، به خصوص زمانی که اندازه داده‌ها از قبل مشخص نیست یا نیاز به عملیات پیچیده‌تری روی داده‌ها وجود دارد. 🗂️💡