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

آیدی ادمین:
@ma_limbs
Download Telegram
‏ویژگی Conditional#C، روشی برای حذف فراخوانی متدها در زمان کامپایل است. ⚙️

‏کافیست این ویژگی را بالای تعریف متد قرار دهید و یک شناسه (identifier) به آن پاس دهید.

```csharp
[Conditional("DEBUG")]
void Log(string message) { ... }
```

‏حالا اگر کامپایلر، شناسه DEBUG را پیدا نکند، تمام فراخوانی‌های `Log` حذف می‌شوند. 🗑️ این کار، حجم نهایی برنامه را کاهش می‌دهد.

https://t.me/csharp7
‏در سی‌شارپ، رابط‌ها (Interfaces) قراردادهایی هستند که رفتار یک کلاس را تعریف می‌کنند، اما پیاده‌سازی آن را به عهده کلاس‌های دیگر می‌گذارند. هدف اصلی رابط‌ها، کاهش وابستگی بین کلاس‌ها و افزایش انعطاف‌پذیری کد است.

‏با استفاده از رابط‌ها، می‌توانید اطمینان حاصل کنید که کلاس‌های مختلف، متدهای مشخصی را با امضای یکسان پیاده‌سازی می‌کنند، حتی اگر منطق داخلی آن‌ها کاملاً متفاوت باشد. این رویکرد، امکان پلی‌مورفیسم را به شکل قدرتمندی فراهم می‌کند و به شما اجازه می‌دهد تا کدی بنویسید که بتواند با انواع مختلفی از اشیاء که یک رابط مشترک را پیاده‌سازی می‌کنند، کار کند. 💡

‏به طور خلاصه، رابط‌ها به طراحی ماژولار و قابلیت نگهداری بهتر کد کمک می‌کنند. 🚀

‏// مثال یک رابط در سی‌شارپ
public interface ILogger
{
void LogMessage(string message);
}

‏// مثالی از کلاسی که رابط را پیاده‌سازی می‌کند
public class ConsoleLogger : ILogger
{
public void LogMessage(string message)
{
Console.WriteLine($"[Console] {message}");
}
}



https://t.me/csharp7
‏Keyed DI در C#‎، امکان تعیین کلید برای سرویس‌ها در Container را فراهم می‌کند.🔑 با این روش، بجای نوع (Type)، با یک کلید (Key) مشخص می‌توان به پیاده‌سازی‌های مختلف یک Interface دسترسی داشت.

‏مزیتش چیه؟ 🤔 فرض کنید چند پیاده‌سازی از یک Interface دارید (مثلاً `IReportGenerator`). با Keyed DI، می‌توانید هر پیاده‌سازی را با یک کلید خاص ثبت کنید ("PDF"، "Excel") و در زمان نیاز، پیاده‌سازی مورد نظر را با کلیدش فراخوانی کنید. ⚙️

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

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

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

🟣 موضوع : ‏پیاده‌سازی چندریختی (Polymorphism) در C#

🟢 سوال :

‏کدام یک از موارد زیر یک ویژگی چندریختی است؟

گزینه ۱:
‏تغییرپذیری (Mutability)

گزینه ۲:
‏وراثت (Inheritance)

گزینه ۳:
‏امکان استفاده از یک رابط برای انواع مختلف اشیاء

گزینه ۴:
‏استفاده از حلقه‌های for

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

🟢 توضیح :

‏چندریختی امکان استفاده از یک رابط برای انواع مختلف اشیاء را فراهم می‌کند.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در زبان C#، Assembly یک واحد قابل کامپایل است که شامل کد اجرایی (IL)، فراداده (metadata) و منابع (resources) می‌باشد. Assemblyها بلوک‌های سازنده‌ی برنامه‌های .NET هستند و می‌توانند فایل‌های اجرایی (.exe) یا کتابخانه‌های پیوند پویا (.dll) باشند.

‏فضاهای نام (Namespaces) ساختاری سلسله مراتبی برای سازماندهی کلاس‌ها، ساختارها، رابط‌ها و سایر انواع در C# فراهم می‌کنند. هدف اصلی فضاهای نام، جلوگیری از تداخل نام‌ها (naming conflicts) است. زمانی که دو کلاس با نام یکسان در پروژه‌های مختلف تعریف می‌شوند، با استفاده از فضاهای نام می‌توان آن‌ها را از یکدیگر متمایز کرد.

‏ارتباط بین Assembly و فضاهای نام به این صورت است که هر Assembly می‌تواند شامل یک یا چند فضای نام باشد. هنگام استفاده از کدی که در یک Assembly دیگر تعریف شده است، باید فضای نام مربوط به آن را با استفاده از کلمه کلیدی using به کد خود وارد کنید تا بتوانید از کلاس‌ها و انواع موجود در آن فضای نام به طور مستقیم استفاده نمایید.

‏به عنوان مثال، برای استفاده از کلاس Console که در فضای نام System قرار دارد و معمولاً در Assembly mscorlib.dll (یا System.Runtime.dll در .NET Core/.NET 5+) موجود است، از دستور زیر استفاده می‌کنیم:

using System;

public class Example
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}


‏در این مثال، using System; به کامپایلر می‌گوید که کلاس Console را در فضای نام System جستجو کند. اگر این خط را حذف کنیم، باید به صورت کامل نام کلاس را با فضای نام آن مشخص کنیم: System.Console.WriteLine("Hello, World!");.

‏بنابراین، Assemblyها بسته‌های فیزیکی کد هستند و فضاهای نام، روشی منطقی برای سازماندهی و دسترسی به آن کدها را ارائه می‌دهند. 💡
‏هر Assembly دارای یک Manifest است که اطلاعاتی درباره خود Assembly، اعضای آن، وابستگی‌ها و نسخه‌ها را در بر می‌گیرد. این Manifest بخشی از فراداده‌ی Assembly است. 📜

https://t.me/csharp7
‏ویژگی `required` در C# 11 معرفی شد. با این ویژگی، فیلدها و پراپرتی‌های یک کلاس یا استراکت، هنگام نمونه‌سازی اجباری می‌شوند.

```csharp
public class Person
{
public required string FirstName { get; set; }
public required string LastName { get; set; }
}
```

‏حالا اگر `Person` را بدون مقداردهی اولیه `FirstName` و `LastName` بسازید، با خطا مواجه می‌شوید. ⚠️ کد خواناتر و از خطاهای زمان اجرا جلوگیری می‌کند.

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏اسکریپت‌های C#‎ با پسوند ‎`.csx`‎، امکان اجرای مستقیم کد بدون نیاز به پروژه کامل را فراهم می‌کنند. 💡

‏این اسکریپت‌ها برای تست سریع کد، اتوماسیون وظایف کوچک یا استفاده در محیط‌های تعاملی (REPL) بسیار مناسب‌اند.

‏برای اجرای یک فایل ‎`.csx`‎ کافیست از دستور ‎`dotnet script <file_name>.csx`‎ در ترمینال استفاده کنید. 💻

https://t.me/csharp7
‏پنجره Immediate Window در ویژوال استودیو ابزاری قدرتمند برای اجرای دستورات C# به صورت تعاملی در زمان اجرای برنامه است. این قابلیت به شما امکان می‌دهد تا مقادیر متغیرها را بررسی کنید، توابع را فراخوانی کنید و حتی تغییراتی را در وضعیت برنامه اعمال نمایید.

‏برای استفاده از این پنجره، ابتدا برنامه خود را در حالت Debug اجرا کنید. سپس، پنجره Immediate Window را از منوی Debug > Windows > Immediate باز کنید. در این پنجره می‌توانید دستورات C# را تایپ کرده و با فشردن Enter، آن‌ها را اجرا کنید.

‏مثال:
string message = "Hello, World!";
Console.WriteLine(message);


‏با تایپ message در Immediate Window و فشردن Enter، مقدار رشته "Hello, World!" نمایش داده می‌شود. همچنین می‌توانید تابعی را فراخوانی کنید:

public int Add(int a, int b)
{
return a + b;
}


‏سپس در Immediate Window دستور Add(5, 3) را اجرا کنید تا نتیجه 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# به شما اجازه میده رفتار سرریز حسابی رو برای نوع داده‌های خودتون مشخص کنید. 🧮

‏کافیه عملگرهای `+`، `-`، `*` و `/` رو با کلمه کلیدی `checked` تعریف کنید. در این صورت، اگه نتیجه از محدوده نوع داده شما خارج بشه، یه استثنا رخ میده. 💥

‏به این ترتیب، می‌تونید مطمئن بشید محاسباتتون همیشه دقیق و قابل اعتماد هستن.

https://t.me/csharp7
‏دانستنی C#‎:

‏متدهای `MaxBy` و `MinBy` در LINQ به شما کمک می‌کنند تا بر اساس یک ویژگی خاص، بزرگترین یا کوچکترین آیتم را در یک مجموعه پیدا کنید.

‏فرض کنید لیستی از اشیاء `Product` دارید و می‌خواهید محصولی با بالاترین قیمت را پیدا کنید:

```csharp
Product mostExpensive = products.MaxBy(p => p.Price);
```

‏به همین سادگی! 🚀💰

https://t.me/csharp7
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏بهینه‌سازی فضای ذخیره‌سازی

نکته 1:
‏برای بهینه‌سازی، اول از همه باید از دستور VACUUM استفاده کنی! این دستور فضای خالی دیتابیس رو حذف می‌کنه و حجم فایل رو کم می‌کنه. 🧹

نکته 2:
‏از نوع داده‌ی BLOB برای ذخیره‌ی فایل‌های حجیم (مثل تصاویر) پرهیز کن! بهتره فایل رو تو سیستم فایل معمولی ذخیره کنی و فقط مسیرش رو تو SQLite بذاری. 📦💾

نکته 3:
‏اگه می‌خوای یه عدد کاملاً صحیح باشه و هیچ‌وقت Null نشه، ستون رو INTEGER PRIMARY KEY تعریف کن. این کار باعث می‌شه از فضای کمتری استفاده بشه. 🔢💡

نکته 4:
‏از ایندکس‌های زیادی پرهیز کن! هر ایندکس یه کپی اضافی از داده‌ها رو تو فایل ذخیره می‌کنه و حجم رو زیاد می‌کنه. فقط برای ستون‌های ضروری ایندکس بساز. 📉

نکته 5:
‏اگه می‌بینی تو یه ستون فقط عدد صفر و یک یا True و False ذخیره می‌کنی، حتماً نوع داده رو INTEGER بذار. چون فضای کمتری نسبت به TEXT می‌گیره. 🤏

نکته 6:
‏برای اینکه دیتابیس خودش کم‌کم تمیز بمونه، PRAGMA auto_vacuum = FULL; رو فعال کن. این باعث می‌شه فضای آزاد مدیریت بشه و دیگه لازم نباشه همیشه VACUUM بزنی. 🔄

نکته 7:
‏در صورت امکان، از نام‌های کوتاه‌تر برای جدول‌ها و ستون‌ها استفاده کن. چون این نام‌ها تو Schema و ایندکس‌ها ذخیره می‌شن و روی حجم نهایی تأثیر می‌ذارن. 📝

نکته 8:
‏به جای ذخیره کردن تاریخ و زمان به صورت رشته‌های طولانی (TEXT)، از فرمت‌های عددی INTEGER (مثلاً Unix Time) استفاده کن. حجم کمتری می‌گیره.

نکته 9:
‏اگه می‌خوای یه کپی تمیز و فشرده از دیتابیس بگیری، از VACUUM INTO 'backup.db'; استفاده کن. این هم بک‌آپه، هم بهینه‌سازی! 📦🔥

نکته 10:
‏برای ستون‌های متنی، سعی کن فقط مقداری که واقعاً لازمه رو ذخیره کنی. حذف فاصله‌های اضافه یا متون تکراری، به طور غیرمستقیم فضای ذخیره‌سازی رو بهینه می‌کنه. 😎


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

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

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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
Media is too big
VIEW IN TELEGRAM
🔵 آموزش مبانی برنامه نویسی - بخش پنجم

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

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

🟣 مبانی برنامه نویسی

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


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، ترکیب (Composition) روشی قدرتمند برای طراحی سیستم‌هاست. به جای اینکه کلاس‌ها از کلاس‌های دیگر ارث‌بری کنند، اشیاء یک کلاس، اشیاء دیگری از کلاس‌های دیگر را در خود نگه می‌دارند و از قابلیت‌های آن‌ها استفاده می‌کنند. این رویکرد به جای وراثت، "یک رابطه داشتن" (has-a) را ایجاد می‌کند که وابستگی‌ها را به شدت کاهش داده و انعطاف‌پذیری کد را برای تغییرات و توسعه‌های آینده افزایش می‌دهد. 🧩💡 #Csharp #DesignPatterns

https://t.me/csharp7
‏در WPF، اعتبارسنجی داده‌ها در اتصال داده (Data Binding) به صورت داخلی پشتیبانی می‌شود. این امکان به شما اجازه می‌دهد تا قبل از اینکه داده‌های نامعتبر به منبع داده برسند، آن‌ها را شناسایی و اصلاح کنید.

‏یکی از راه‌های اصلی پیاده‌سازی اعتبارسنجی، استفاده از قابلیت ValidationRules در اتصال داده است. شما می‌توانید کلاس‌های سفارشی خود را بسازید که از ValidationRule ارث‌بری می‌کنند و منطق اعتبارسنجی خود را در متد Validate پیاده‌سازی کنند.

‏مثال ساده‌ای از یک ValidationRule برای اطمینان از اینکه یک فیلد عددی، خالی نباشد:

public class NotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
{
‏ return new ValidationResult(false, "این فیلد نمی‌تواند خالی باشد.");
}
return ValidationResult.ValidResult;
}
}


‏برای استفاده از این ValidationRule در XAML، آن را به صورت زیر به Binding اضافه می‌کنید:

<TextBox>
<Binding Path="MyNumericProperty" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:NotEmptyValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox>


‏هنگامی که کاربر مقداری را وارد می‌کند و UpdateSourceTrigger روی PropertyChanged تنظیم شده باشد، ValidationRule اجرا می‌شود. اگر اعتبارسنجی ناموفق باشد، ValidationResult با IsValid برابر false برگردانده می‌شود و پیام خطا نمایش داده خواهد شد.

‏WPF همچنین از IDataErrorInfo و INotifyDataErrorInfo برای پیاده‌سازی اعتبارسنجی پشتیبانی می‌کند که امکانات بیشتری برای مدیریت خطاها و نمایش آن‌ها فراهم می‌کنند.

‏اعتبارسنجی در سمت کلاینت (WPF) به بهبود تجربه کاربری و کاهش بار روی سرور کمک شایانی می‌کند. 🚀

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#‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‎ 12: قابلیت‌های Chunk، Take و Skip برای کار با لیست‌ها:

‏`Chunk`: لیست را به بخش‌های کوچک‌تر تقسیم می‌کند. ✂️
‏`Take`: تعداد مشخصی از آیتم‌های ابتدایی لیست را برمی‌گرداند.
‏`Skip`: تعداد مشخصی از آیتم‌های ابتدایی لیست را رد می‌کند و باقی را برمی‌گرداند. ➡️

https://t.me/csharp7
💡 نکته #SQL

🟣 موضوع : ‏Stored Procedures و نحوه ایجاد آن‌ها

نکته :

‏وقتی Stored Procedureت رو ساختی، فقط با یه اسم صداش کن و کار رو ازش بخواه. 🗣️


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

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

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

آدرس وبسایت:
https://Tutorial24.ir