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

آیدی ادمین:
@ma_limbs
Download Telegram
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏معرفی و کاربرد Entity Framework

🟢 سوال :

‏کدام یک از موارد زیر یک روش برای تعریف جداول پایگاه داده در Entity Framework است؟

گزینه ۱:
‏استفاده از کلاس‌های C#

گزینه ۲:
‏استفاده از دستورات SQL

گزینه ۳:
‏استفاده از فایل‌های XML

گزینه ۴:
‏استفاده از فایل‌های JSON

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

🟢 توضیح :

‏Entity Framework جداول پایگاه داده را با استفاده از کلاس‌های C# تعریف می‌کند.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : ‏FaunaDB و NewSQL ترکیبی

نکته :

‏ساختارهای داده تو FaunaDB خیلی منعطفن. می‌تونی داده‌هات رو هرطور که دوست داری ذخیره کنی. 😎


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

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

آدرس کانال اصلی :
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
‏در سی‌شارپ، فیلدها (Fields) متغیرهایی هستند که وضعیت یک کلاس یا شیء را ذخیره می‌کنند. آن‌ها معمولاً به صورت private تعریف می‌شوند تا دسترسی مستقیم به آن‌ها کنترل شود.

public class Person
{
‏ private string name; // این یک فیلد است
}


‏ویژگی‌ها (Properties) مکانیزم استاندارد برای خواندن و نوشتن مقادیر فیلدها هستند. آن‌ها از طریق گتر (getter) و سِتر (setter) به فیلدها دسترسی دارند و امکان اعتبارسنجی یا اجرای منطق اضافی را فراهم می‌کنند.

public class Person
{
private string name;

‏ public string Name // این یک ویژگی است
{
get { return name; }
set { name = value; }
}
}


‏استفاده از ویژگی‌ها به جای دسترسی مستقیم به فیلدها، کد را انعطاف‌پذیرتر و قابل نگهداری‌تر می‌کند. 👍💡

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

‏برای پرتاب یک استثنا، از کلمه کلیدی throw به همراه یک شیء از نوع استثنا استفاده می‌کنید. به عنوان مثال:

if (value < 0)
{
‏ throw new ArgumentOutOfRangeException("value", "مقدار نمی‌تواند منفی باشد.");
}


‏در این مثال، اگر مقدار ورودی منفی باشد، یک استثنای ArgumentOutOfRangeException پرتاب می‌شود. این استثنا اطلاعاتی درباره دلیل خطا (نام پارامتر و پیام خطا) را در خود نگه می‌دارد.

Unhandled Exceptions

‏زمانی که یک استثنا پرتاب می‌شود اما توسط هیچ بلوک try-catch در برنامه دریافت و مدیریت نمی‌شود، به آن "Unhandled Exception" یا استثنای مدیریت نشده می‌گویند. در این حالت، اجرای برنامه متوقف شده و معمولاً یک پیام خطا به کاربر نمایش داده می‌شود.

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

https://t.me/csharp7
‏متد `RuntimeHelpers.IsReferenceOrContainsReferences<T>` در C# بررسی می‌کنه که آیا نوع `T` یک نوع reference است یا شامل فیلدهای reference type میشه. 🔍

‏این متد در سناریوهایی کاربرد داره که نیاز به تعیین نحوه مدیریت حافظه یک نوع داریم. به طور مثال، می‌تونیم بفهمیم که آیا نوعی نیاز به garbage collection داره یا نه. ♻️

‏خروجی این متد یک مقدار boolean هست. `true` یعنی نوع مورد نظر reference type هست یا شامل اون میشه و `false` یعنی value type هست و reference type نداره.

https://t.me/csharp7
‏در C#، انواع داده‌ها به دو دسته اصلی تقسیم می‌شوند: انواع مقداری (Value Types) و انواع ارجاعی (Reference Types).

‏انواع مقداری: شامل انواع پایه‌ای مانند int (عدد صحیح)، float (عدد اعشاری)، bool (مقدار بولی)، char (کاراکتر) و همچنین انواع ساختاریافته (struct) هستند. این نوع داده‌ها مستقیماً مقدار خود را ذخیره می‌کنند.

‏انواع ارجاعی: شامل کلاس‌ها (class)، آرایه‌ها (array)، رشته‌ها (string) و واسط‌ها (interface) هستند. این نوع داده‌ها به جای مقدار خود، به محل قرارگیری داده در حافظه (heap) ارجاع می‌دهند.

‏تعریف اولین کلاس ساده در C#:

‏کلاس‌ها بلوک‌های سازنده برنامه‌های شیءگرا در C# هستند. یک کلاس می‌تواند شامل متغیرهایی (که به آن‌ها فیلد یا عضو داده گفته می‌شود) و متدهایی (توابعی که عملیاتی را انجام می‌دهند) باشد.

‏برای تعریف یک کلاس ساده، از کلمه کلیدی class استفاده می‌کنیم.

‏// تعریف یک کلاس ساده به نام Person
public class Person
{
‏ // فیلد (عضو داده) برای ذخیره نام
public string Name;

‏ // فیلد (عضو داده) برای ذخیره سن
public int Age;

‏ // متد برای نمایش اطلاعات شخص
public void DisplayInfo()
{
‏ Console.WriteLine($"نام: {Name}, سن: {Age}");
}
}


‏نحوه استفاده از کلاس:

‏برای استفاده از یک کلاس، ابتدا باید یک نمونه (instance) از آن کلاس ایجاد کنیم. این کار با استفاده از کلمه کلیدی new انجام می‌شود.

‏// ایجاد یک نمونه جدید از کلاس Person
Person person1 = new Person();

‏// اختصاص مقادیر به فیلدهای نمونه
‏person1.Name = "علی";
person1.Age = 30;

‏// فراخوانی متد DisplayInfo
‏person1.DisplayInfo(); // خروجی: نام: علی, سن: 30


‏با این تعریف ساده، شما یک کلاس Person دارید که می‌تواند اطلاعات مربوط به یک شخص را ذخیره و نمایش دهد. 🧑‍💻👨‍💼

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
📚 نکته #SQLite

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

نکته 1:
‏نمایه‌ها (Indexes) ساختارهای داده‌ای مجزایی هستند که با دستور CREATE INDEX ایجاد می‌شوند و برای تسریع فرآیند بازیابی داده‌ها (Data Retrieval) از جداول SQLite طراحی شده‌اند.

نکته 2:
‏ساختار داده‌ای نمایه‌ها معمولاً به صورت یک درخت بی پلاس (B-tree) سازماندهی می‌شود که دسترسی مستقیم و سریع به سطرها را بر اساس مقادیر کلید فراهم می‌سازد .

نکته 3:
‏هدف اصلی از ایجاد نمایه، کاهش تعداد عملیات ورودی/خروجی دیسک (Disk I/O) مورد نیاز برای اجرای پرس‌وجوها، به ویژه آن‌هایی که دارای بندهای WHERE یا ORDER BY هستند، است.

نکته 4:
‏ایجاد یک نمایه، سربار اضافی (Overhead) در عملیات دستکاری داده‌ها (DML) مانند INSERT، UPDATE و DELETE ایجاد می‌کند، زیرا نمایه باید پس از هر تغییر در داده‌های جدول، به‌روزرسانی شود.

نکته 5:
‏SQLite به طور خودکار اندیس‌های داخلی برای ستون‌های PRIMARY KEY و UNIQUE ایجاد می‌کند تا از اجرای قیدهای یکپارچگی و دسترسی سریع به سطرها اطمینان حاصل شود.

نکته 6:
‏نمایه‌ها را می‌توان بر روی یک ستون (Single-Column Index) یا بر روی ترکیبی از چندین ستون (Composite Index) ایجاد کرد که برای پرس‌وجوهایی با شروط چندگانه مفید است.

نکته 7:
‏ترتیب ستون‌ها در یک نمایه ترکیبی اهمیت زیادی دارد و باید با ترتیب استفاده از ستون‌ها در بند WHERE پرس‌وجوها برای بهینه‌سازی بهتر، مطابقت داشته باشد.

نکته 8:
‏نمایه‌های UNIQUE INDEX تضمین می‌کنند که مقادیر موجود در ستون‌های نمایه شده، هیچ‌گونه تکراری نداشته باشند و از یکپارچگی داده‌ها محافظت می‌کند.

نکته 9:
‏تحلیل عملکردی (Performance Analysis) پرس‌وجوها با استفاده از عبارت EXPLAIN QUERY PLAN به متخصصان امکان می‌دهد تا از استفاده صحیح و مؤثر نمایه‌ها توسط بهینه‌ساز پرس‌وجو (Query Optimizer) اطمینان حاصل نمایند.

نکته 10:
‏تصمیم‌گیری برای ایجاد یک نمایه باید با در نظر گرفتن تعادل بین سرعت بازیابی و سربار به‌روزرسانی انجام شود؛ نمایه‌های بیش از حد می‌توانند عملکرد کلی سیستم را کاهش دهند.


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

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

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

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏ویژگی `[CallerArgumentExpression]` در C# 10 به شما کمک می‌کنه اسم آرگومان پاس داده شده به یک متد رو در زمان کامپایل به دست بیارید. 😎

‏این قابلیت در assertionها خیلی کاربردیه. دیگه لازم نیست اسم متغیر رو به صورت دستی وارد کنید، کامپایلر خودش این کار رو انجام میده! 👌

```csharp
void Assert(bool condition, [CallerArgumentExpression("condition")] string? message = null)
{
if (!condition)
throw new Exception($"Assertion failed: {message}");
}

int age = 15;
Assert(age > 18); // Assertion failed: age > 18
```


https://t.me/csharp7
‏برای نمایش کاراکترهای خاص در خروجی کنسول C#، می‌توانید از کاراکترهای escape استفاده کنید. مثلاً \n برای خط جدید و \t برای تب.

‏برای تنظیم رنگ متن و پس‌زمینه خروجی کنسول، از ویژگی‌های Console.ForegroundColor و Console.BackgroundColor استفاده کنید. این ویژگی‌ها از نوع ConsoleColor هستند و مقادیر مختلفی مانند ConsoleColor.Red، ConsoleColor.Green، ConsoleColor.Blue و ... را می‌پذیرند.

‏مثال:
using System;

Console.ForegroundColor = ConsoleColor.Yellow;
‏Console.WriteLine("این متن با رنگ زرد نمایش داده می‌شود.");
‏Console.ResetColor(); // بازگرداندن رنگ به حالت پیش‌فرض

Console.BackgroundColor = ConsoleColor.DarkBlue;
‏Console.WriteLine("این متن با پس‌زمینه آبی تیره نمایش داده می‌شود.");
Console.ResetColor();

‏Console.WriteLine("این یک خط جدید است:\nاین خط بعدی است.");
‏Console.WriteLine("این متن با یک تب فاصله دارد:\tبعد از تب.");

‏با استفاده از Console.ResetColor() می‌توانید رنگ‌های تنظیم شده را به حالت پیش‌فرض برگردانید. 🎨💡

https://t.me/csharp7
‏در برنامه‌نویسی شیءگرا (OOP) در سی شارپ، رابط‌های کاربری (Interfaces) نقش کلیدی در دستیابی به انتزاع (Abstraction) ایفا می‌کنند. رابط کاربری مجموعه‌ای از قراردادها را تعریف می‌کند که یک کلاس باید آن‌ها را پیاده‌سازی کند. این قراردادها شامل متدها، خصوصیات (Properties)، رویدادها (Events) و ایندکسرها (Indexers) هستند که فقط امضا (Signature) آن‌ها مشخص شده و بدنه (Body) ندارند.

‏یک کلاس می‌تواند چندین رابط کاربری را پیاده‌سازی کند، اما تنها می‌تواند از یک کلاس پایه ارث‌بری کند. این قابلیت امکان چندریختی (Polymorphism) را فراهم می‌کند، زیرا می‌توان اشیائی از کلاس‌های مختلف که یک رابط کاربری مشترک را پیاده‌سازی کرده‌اند، از طریق آن رابط کاربری مدیریت کرد.

‏مثال ساده:
‏// تعریف یک رابط کاربری
public interface IDrawable
{
‏ void Draw(); // فقط امضای متد
}

‏// کلاسی که رابط کاربری را پیاده‌سازی می‌کند
public class Circle : IDrawable
{
public void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}

‏// کلاسی دیگر که رابط کاربری را پیاده‌سازی می‌کند
public class Square : IDrawable
{
public void Draw()
{
Console.WriteLine("Drawing a square.");
}
}


‏در این مثال، IDrawable رابط کاربری است که متد Draw() را تعریف می‌کند. کلاس‌های Circle و Square هر دو IDrawable را پیاده‌سازی کرده و هر کدام نحوه اجرای متد Draw() را خودشان مشخص می‌کنند. این امر به ما اجازه می‌دهد تا با هر شکلی که IDrawable را پیاده‌سازی کرده، به صورت یکسان رفتار کنیم.

‏استفاده از رابط‌های کاربری باعث افزایش انعطاف‌پذیری و قابلیت نگهداری کد می‌شود. آن‌ها به جداسازی مسئولیت‌ها کمک کرده و امکان تغییر یا افزودن پیاده‌سازی‌های جدید را بدون تأثیر بر کدهای موجود که از آن رابط کاربری استفاده می‌کنند، فراهم می‌سازند. 🎨

https://t.me/csharp7
‏حلقه‌ها در C# ابزاری قدرتمند برای تکرار کد هستند. در پروژه‌های کوچک، کاربردهای متنوعی دارند.

‏حلقه for: مناسب زمانی که تعداد تکرار مشخص است. مثلاً برای پیمایش یک آرایه:
‏string[] names = { "علی", "رضا", "مریم" };
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(names[i]);
}


‏حلقه while: تا زمانی که شرط برقرار است، اجرا می‌شود. برای سناریوهایی که تعداد تکرار از قبل مشخص نیست:
int count = 0;
while (count < 5)
{
‏ Console.WriteLine("تکرار شماره: " + (count + 1));
count++;
}


‏حلقه foreach: برای پیمایش عناصر یک مجموعه (مانند آرایه یا لیست) بدون نیاز به مدیریت ایندکس:
List<int> numbers = new List<int> { 10, 20, 30 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}

‏این حلقه‌ها به شما امکان می‌دهند تا وظایف تکراری را به صورت کارآمد انجام دهید. 🚀💡

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
‏Arm64 دو مجموعه دستورالعمل SIMD داره: AdvSimd (Neon) و SVE. 🧮

‏AdvSimd یک استاندارد قدیمی‌تره و در همه پردازنده‌های Arm64 وجود داره. SVE جدیدتره و انعطاف‌پذیری بیشتری در اندازه بردارها (Vector) ارائه میده.

‏SVE به کامپایلر اجازه میده کد رو برای طیف وسیع‌تری از پردازنده‌ها بهینه کنه. با این حال، AdvSimd همچنان برای کدهایی که بهینه‌سازی دستی شدن، کاربرد داره. 💪

https://t.me/csharp7
‏در نسخه‌های جدید C# دیگه خبری از اون ساختار همیشگی `Program.cs` نیست! 🤯

‏قبلاً یه عالمه using و namespace و class می‌دیدیم، اما الان یه فایل ساده‌ست که فقط یه خط کد توش نوشته شده.

```csharp
// Minimal Program.cs
Console.WriteLine("Hello, World!");
```

‏در مقابل، ساختار کامل و سنتی `Program.cs` رو هم داریم که همچنان معتبره و می‌تونید ازش استفاده کنید.

```csharp
// Full Program.cs
using System;

namespace MyProject
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
```
‏انتخاب با شماست! 😉

https://t.me/csharp7
‏پیاده‌سازی IFormattable در C# به شما امکان میدهید مشخص کنید چطور یک شی هنگام تبدیل به رشته، فرمت‌بندی بشه. ⚙️

‏اینترفیس یه متد ToString با فرمت و provider داره. با این کار، کنترل دقیق‌تری روی نمایش مقادیر خواهید داشت. 💫

‏مثال: تعیین تعداد ارقام اعشار برای نمایش یک عدد. 🔢

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏برای سرویس‌دهی فایل‌های استاتیک مانند HTML، CSS و JavaScript در ASP.NET Core، کافیست این فایل‌ها را در پوشه wwwroot پروژه قرار دهید. ASP.NET Core به طور پیش‌فرض این پوشه را برای سرویس‌دهی فایل‌های استاتیک در نظر گرفته است.

‏برای فعال‌سازی این قابلیت، در متد Configure کلاس Startup (یا Program.cs در .NET 6 به بعد)، از Middleware مربوطه استفاده کنید:

‏// در متد Configure در Startup.cs (برای نسخه‌های قدیمی‌تر از .NET 6)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
‏ // ... سایر تنظیمات

‏ app.UseStaticFiles(); // فعال‌سازی سرویس‌دهی فایل‌های استاتیک از wwwroot

‏ // ... سایر تنظیمات
}

‏// در متد Main در Program.cs (برای .NET 6 و نسخه‌های جدیدتر)
var builder = WebApplication.CreateBuilder(args);

‏// ... سایر سرویس‌ها

var app = builder.Build();

‏// ... سایر تنظیمات

‏app.UseStaticFiles(); // فعال‌سازی سرویس‌دهی فایل‌های استاتیک از wwwroot

‏// ... سایر تنظیمات

app.Run();




https://t.me/csharp7
‏تابع Zip در C#، دو دنباله (enumeration) رو با هم ترکیب می‌کنه و یه دنباله جدید می‌سازه. 🗜️

‏فرض کن دو تا لیست اسم و فامیل داری. Zip اینا رو به یه لیست اسم و فامیل کامل تبدیل می‌کنه. 🧑‍🤝‍🧑

```csharp
var names = new string[] { "Ali", "Reza" };
var lastNames = new string[] { "Mohammadi", "Alavi" };

var fullNames = names.Zip(lastNames, (name, lastName) => name + " " + lastName);
// Output: {"Ali Mohammadi", "Reza Alavi"}
```

‏اینجوری می‌تونی اطلاعات مرتبط رو به سادگی کنار هم داشته باشی. 👌

https://t.me/csharp7