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

آیدی ادمین:
@ma_limbs
Download Telegram
‏در C#، اعضای ساختارها (structs) در زمان ایجاد، مقادیر پیش‌فرض خود را دریافت می‌کنند. این مقادیر بسته به نوع داده عضو متفاوت است:

‏- انواع مقداری (Value Types):
‏ - انواع عددی (مانند int, float, double, decimal): مقدار پیش‌فرض آن‌ها صفر است.
‏ - انواع منطقی (bool): مقدار پیش‌فرض آن‌ها false است.
‏ - انواع کاراکتری (char): مقدار پیش‌فرض آن‌ها \0 (کاراکتر null) است.
‏ - انواع شمارشی (enums): مقدار پیش‌فرض آن‌ها برابر با مقدار عددی صفر عضو اول enum است.
‏ - ساختارهای دیگر: مقدار پیش‌فرض آن‌ها نیز صفر برای تمام اعضای مقداری‌شان خواهد بود.

‏- انواع ارجاعی (Reference Types) که به عنوان اعضای ساختار قرار می‌گیرند:
‏ - مانند کلاس‌ها، رشته‌ها (string)، آرایه‌ها و delegates: مقدار پیش‌فرض آن‌ها null است.

‏این رفتار تضمین می‌کند که حتی قبل از اختصاص مقدار صریح، اعضای ساختار دارای یک وضعیت معتبر و قابل پیش‌بینی باشند. 💡⚙️

https://t.me/csharp7
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Create Java Project

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

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

🟣 Eclipse

🟢 زبان آموزش: انگلیسی

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

شامل موضوعات آموزشی زیر:

توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی

با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
‏هنگام کار با مجموعه‌های داده در C#، به خصوص زمانی که نیاز به افزودن یا حذف مکرر عناصر در ابتدای یک لیست دارید، توجه به کارایی عملیات بسیار مهم است.

‏برای مثال، تصور کنید لیستی از اعداد دارید و می‌خواهید اعداد جدیدی را به ابتدای آن اضافه کنید. استفاده از List<T> برای این منظور می‌تواند هزینه‌بر باشد، زیرا هر بار که عنصری به ابتدا اضافه می‌شود، تمام عناصر موجود باید یک خانه به جلو شیفت داده شوند. این عملیات در صورت تکرار زیاد، می‌تواند منجر به کندی قابل توجه برنامه شود.

‏// مثال با List<T> که می‌تواند کند باشد
var myList = new List<int> { 1, 2, 3 };
for (int i = 0; i < 1000; i++)
{
‏ myList.Insert(0, i); // عملیات Insert در ابتدای List<T> پرهزینه است
}


‏در چنین سناریوهایی، استفاده از LinkedList<T> گزینه بهتری است. LinkedList<T> برای عملیات افزودن و حذف در ابتدا یا انتهای لیست، بسیار کارآمدتر عمل می‌کند، زیرا نیازی به جابجایی عناصر ندارد و صرفاً با دستکاری اشاره‌گرها (pointers) انجام می‌شود.

‏// مثال با LinkedList<T> که کارآمدتر است
var myLinkedList = new LinkedList<int>();
for (int i = 0; i < 1000; i++)
{
‏ myLinkedList.AddFirst(i); // AddFirst در LinkedList<T> بسیار سریع است
}


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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Hover Help

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

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

🟣 Eclipse

🟢 زبان آموزش: انگلیسی

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، دسترسی به عناصر یک List<T> هم از طریق index (اندیس) و هم با استفاده از حلقه‌های تکرار امکان‌پذیر است.

‏برای دسترسی مستقیم به یک عنصر، از اندیس آن استفاده کنید:

List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
‏string firstPerson = names[0]; // دسترسی به عنصر اول (اندیس 0)
‏string secondPerson = names[1]; // دسترسی به عنصر دوم (اندیس 1)


‏برای پیمایش کل لیست، می‌توانید از حلقه for یا foreach بهره ببرید:

‏با استفاده از حلقه for و اندیس:

for (int i = 0; i < names.Count; i++)
{
Console.WriteLine($"Element at index {i}: {names[i]}");
}


‏با استفاده از حلقه foreach (که معمولاً خواناتر است):

foreach (string name in names)
{
Console.WriteLine($"Name: {name}");
}


‏هر دو روش برای کار با مجموعه‌های داده در لیست‌های C# کاربردی هستند. 💡📊

https://t.me/csharp7
‏SyntaxProvider در Roslyn، ابزاری برای تحلیل سورس کد C# به صورت افزایشی (Incremental) است. 🔄 این رویکرد باعث میشه کامپایلر فقط تغییرات کد رو پردازش کنه و سرعت کامپایل به شکل چشمگیری افزایش پیدا کنه. 🚀 برای پروژه‌های بزرگ، SyntaxProvider یک گزینه عالی برای بهینه‌سازی فرآیند بیلد محسوب می‌شه. 👍

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
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 آموزش گیت (Git) - مقدمه

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

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

🟣 آموزش گیت (Git)

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


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Different IDEs

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

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

🟣 Eclipse

🟢 زبان آموزش: انگلیسی

🟣 دوره آموزش Eclipse


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏توی #C، مقایسه بر اساس مقدار (Value-based equality) یعنی دو شیء وقتی برابرند که مقدارشون یکسان باشه.

‏اما مقایسه بر اساس ارجاع (Reference equality) یعنی دو شیء فقط وقتی برابرند که دقیقاً یک شیء در حافظه باشند. 🧠

‏متغیرهای value type مثل int و bool مقایسه‌شون value-based هست، اما classها به‌صورت پیش‌فرض reference-based مقایسه میشن.

‏میتونید با override کردن متد Equals() و GetHashCode() برای classها، مقایسه value-based رو پیاده‌سازی کنید. ⚙️

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏در C#، چندریختی (Polymorphism) یکی از اصول کلیدی برنامه‌نویسی شیءگراست که به اشیاء از کلاس‌های مختلف اجازه می‌دهد تا به یک پیام (متد) به روش‌های متفاوت پاسخ دهند. این قابلیت معمولاً با استفاده از وراثت و متدهای مجازی پیاده‌سازی می‌شود.

‏برای درک بهتر، فرض کنید یک کلاس پایه Shape داریم که شامل متدی به نام Draw است. این متد در کلاس پایه فقط یک پیام کلی نمایش می‌دهد.

public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a generic shape.");
}
}


‏کلمه کلیدی virtual در متد Draw به کامپایلر می‌گوید که این متد می‌تواند توسط کلاس‌های مشتق شده بازتعریف (Override) شود.

‏حالا کلاس‌های مشتق شده‌ای مانند Circle و Square را در نظر بگیرید که از Shape ارث می‌برند. هر کدام از این کلاس‌ها می‌توانند متد Draw را بازتعریف کنند تا رفتار خاص خود را پیاده‌سازی کنند.

public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}

public class Square : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a square.");
}
}


‏کلمه کلیدی override نشان می‌دهد که این متد، متد مجازی کلاس پایه را بازتعریف می‌کند.

‏حالا می‌توانیم نمونه‌هایی از این کلاس‌ها را ایجاد کرده و رفتار چندریختی را مشاهده کنیم:

Shape myCircle = new Circle();
Shape mySquare = new Square();
Shape genericShape = new Shape();

‏myCircle.Draw(); // خروجی: Drawing a circle.
‏mySquare.Draw(); // خروجی: Drawing a square.
‏genericShape.Draw(); // خروجی: Drawing a generic shape.


‏در اینجا، حتی اگر متغیر از نوع Shape باشد، متد Draw فراخوانی شده مربوط به کلاس واقعی شیء ( Circle یا Square) است. این قدرت چندریختی را نشان می‌دهد. 💡🌍

https://t.me/csharp7
‏در C#، استفاده از شرط‌های پیشگیری از خطا (Validation) قبل از اجرای کد اصلی، روشی کلیدی برای اطمینان از صحت ورودی‌ها و جلوگیری از بروز خطاهای ناخواسته است. این کار باعث افزایش پایداری و قابلیت اطمینان برنامه می‌شود.

‏به عنوان مثال، قبل از استفاده از یک ورودی کاربر در محاسبات، می‌توانیم بررسی کنیم که آیا این ورودی از نوع عددی مورد انتظار است یا خیر.

string userInput = Console.ReadLine();

if (int.TryParse(userInput, out int number))
{
‏ // کد اصلی که از 'number' استفاده می‌کند
‏ Console.WriteLine($"عدد وارد شده: {number}");
}
else
{
‏ Console.WriteLine("ورودی نامعتبر است. لطفاً یک عدد صحیح وارد کنید.");
}


‏استفاده از متدهایی مانند int.TryParse به جای تبدیل مستقیم با int.Parse، از پرتاب شدن استثنا (Exception) در صورت نامعتبر بودن ورودی جلوگیری می‌کند. این رویکرد، برنامه‌نویسی ایمن‌تر و خواناتری را فراهم می‌آورد. 🛡️

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
‏فشرده‌سازی Requestها تو #aspnetcore 🚀 باعث افزایش سرعت و کاهش مصرف پهنای باند میشه.

‏Middleware مربوط به Decompression اینجاست تا Requestهای فشرده (Gzip, Brotli) رو براتون باز کنه. 📦

‏دیگه نگران هندل کردن دستی فشرده‌سازی نباشید! 👍

```csharp
// Startup.cs
public void Configure(IApplicationBuilder app)
{
app.UseRequestDecompression();
// ...
}
```
‏به همین سادگی!
#dotnet #middleware

https://t.me/dotnet7ir
‏Nullable annotation در constraintهای generic، امکان تعیین nullability نوع T رو فراهم میکنه. 🤔

```csharp
‏// T? : T میتونه nullable باشه
‏// T : T نمیتونه nullable باشه
public class MyClass<T> where T : class? { ... }
```

‏اینطوری میشه مشخص کرد که یک generic type parameter میتونه null بپذیره یا نه. این کار به جلوگیری از خطاهای احتمالی null reference کمک میکنه. 👌

https://t.me/csharp7
‏Thread-safety در C# فقط با lock کردن به دست نمیاد. 🪢

‏`Interlocked` برای عملیات اتمی (atomic) روی متغیرهاست.

‏`Volatile` جلوی بهینه‌سازی‌های کامپایلر و CPU رو می‌گیره تا مقدار متغیر همیشه از حافظه اصلی خونده بشه. 🧠

‏`MemoryBarrier` ترتیب اجرای دستورات رو تضمین می‌کنه. 🚧

‏هر کدوم کاربرد خاص خودشون رو دارن!

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
‏در C#، آرایه‌ها ساختارهایی برای نگهداری مجموعه‌ای از عناصر با نوع داده یکسان هستند.

‏آرایه‌های چندبعدی (Multidimensional Arrays) به صورت جدولی با ابعاد مشخص تعریف می‌شوند. به عنوان مثال، یک آرایه دو بعدی (ماتریس) را می‌توان به این صورت تعریف کرد:

‏int[,] matrix = new int[3, 4]; // یک ماتریس 3x4


‏آرایه‌های پویای (Dynamic Arrays) که در C# با نام List<T> شناخته می‌شوند، قابلیت تغییر اندازه خودکار را دارند و نیازی به تعیین اندازه اولیه ندارند. این ساختار برای مواقعی که تعداد عناصر از قبل مشخص نیست، بسیار کاربردی است.

List<string> names = new List<string>();
names.Add("Ali");
names.Add("Reza");


List<T> از نظر عملکردی شبیه به آرایه‌هاست اما انعطاف‌پذیری بیشتری در مدیریت تعداد عناصر ارائه می‌دهد. 📚

https://t.me/csharp7