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

آیدی ادمین:
@ma_limbs
Download Telegram
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏در WPF، برای تغییر ظاهر و رفتار یک کنترل بدون تغییر ساختار اصلی آن، می‌توان از ControlTemplate استفاده کرد. این قابلیت به شما امکان می‌دهد تا ظاهر پیش‌فرض کنترل‌هایی مانند دکمه، جعبه متن و غیره را کاملاً بازنویسی کرده و ظاهری سفارشی به اپلیکیشن خود ببخشید.

‏برای مثال، برای تغییر ظاهر یک دکمه استاندارد در WPF، می‌توانید یک ControlTemplate جدید تعریف کنید. این تمپلیت، ساختار بصری جدیدی را برای دکمه مشخص می‌کند. در این تمپلیت، شما می‌توانید از عناصر مختلف WPF مانند Grid, StackPanel, TextBlock, Border و حتی سایر کنترل‌ها استفاده کنید.

<Window.Resources>
<ControlTemplate x:Key="CustomButtonTemplate" TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Window.Resources>

‏<Button Content="دکمه سفارشی" Template="{StaticResource CustomButtonTemplate}"
Background="LightBlue" BorderBrush="DarkBlue" Height="40" Width="120"/>


‏در این مثال، TargetType="Button" مشخص می‌کند که این تمپلیت برای دکمه‌ها اعمال می‌شود. ContentPresenter محتوای اصلی دکمه (مانند متن آن) را نمایش می‌دهد. ویژگی‌های TemplateBinding به تمپلیت اجازه می‌دهند تا ویژگی‌های اصلی کنترل (مانند Background و BorderBrush) را به ارث ببرد. با اعمال این ControlTemplate به یک Button، ظاهر پیش‌فرض آن با یک کادر با گوشه‌های گرد و رنگ پس‌زمینه آبی روشن جایگزین می‌شود.

‏این روش امکان ایجاد رابط‌های کاربری بسیار پویا و منحصر به فرد را فراهم می‌کند و به توسعه‌دهندگان اجازه می‌دهد تا فراتر از ظاهر استاندارد کنترل‌های WPF بروند. 🎨

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

🟣 موضوع : ‏استفاده از ValueTuple در نسخه‌های جدید C#

🟢 سوال :

‏کدام یک از موارد زیر یک مثال از کاربرد ValueTuple است؟

گزینه ۱:
‏مدیریت پایگاه داده

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

گزینه ۳:
‏محاسبات ریاضی پیچیده

گزینه ۴:
‏ایجاد انیمیشن‌های گرافیکی

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

🟢 توضیح :

‏بازگرداندن چند مقدار از یک تابع بدون تعریف کلاس جدید، یک مثال از کاربرد ValueTuple است.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، مخفی‌سازی (Encapsulation) یکی از اصول کلیدی برنامه‌نویسی شیءگراست. این اصل به ما کمک می‌کند تا جزئیات پیاده‌سازی یک کلاس را از دنیای بیرون پنهان کنیم و تنها واسطی را برای تعامل با آن کلاس فراهم آوریم. این کار باعث افزایش امنیت، قابلیت نگهداری و خوانایی کد می‌شود.

‏برای دستیابی به مخفی‌سازی، از سطوح دسترسی (Access Modifiers) مانند `private`، `protected` و `public` استفاده می‌شود. معمولاً اعضای کلاس (فیلدها و متدها) به صورت `private` تعریف شده و برای دسترسی و تغییر آن‌ها، از متدهای `public` به نام Getter و Setter (یا Properties) استفاده می‌شود.

‏استفاده از الگوهای طراحی ساده (Simple Design Patterns) مانند "Wrapper" یا "Adapter" نیز می‌تواند به سازماندهی بهتر کد و مخفی‌سازی موثرتر پیاده‌سازی کمک کند. این الگوها به ما اجازه می‌دهند تا کدهای موجود را بدون تغییر اساسی، به شکلی استانداردتر و قابل فهم‌تر در اختیار داشته باشیم. 💻🔒

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# رویدادها (Events) می‌توانند `partial` باشند. این یعنی تعریف یک رویداد می‌تواند در چند فایل `partial class` توزیع شود.

‏این قابلیت، مدیریت رویدادهای پیچیده را در پروژه‌های بزرگ آسان‌تر می‌کند.

‏فرض کنید یک رویداد دارید که هندلرهای مختلفی در قسمت‌های مختلف برنامه به آن متصل می‌شوند. با استفاده از `partial events` می‌توانید تعریف و هندلرهای مربوط به هر بخش را در فایل‌های جداگانه نگهداری کنید. 🧩

‏به این ترتیب، کد شما منظم‌تر و خواناتر خواهد بود. 🧹

https://t.me/csharp7
‏پایگاه‌های داده NoSQL در برنامه‌های C# کاربردهای متنوعی دارند. یکی از سناریوهای رایج، استفاده از آن‌ها به عنوان کش (Cache) است. با ذخیره‌سازی موقت داده‌های پرکاربرد در پایگاه داده‌ای مانند Redis، می‌توان سرعت دسترسی به اطلاعات را به طور چشمگیری افزایش داد و بار روی پایگاه داده اصلی را کاهش داد. 🚀

‏سناریوی دیگر، مدیریت سشن (Session Management) است. در برنامه‌های تحت وب، نگهداری اطلاعات مربوط به سشن کاربران در پایگاه داده NoSQL مانند MongoDB، مقیاس‌پذیری و پایداری برنامه را بهبود می‌بخشد.

‏همچنین، برای ذخیره‌سازی داده‌های لاگ (Log Data)، NoSQL انتخاب مناسبی است. حجم بالای داده‌های لاگ و نیاز به ذخیره‌سازی و جستجوی سریع، باعث می‌شود پایگاه داده‌هایی مانند Elasticsearch یا Cassandra برای این منظور ایده‌آل باشند. 📊

‏این پایگاه‌های داده به دلیل انعطاف‌پذیری در ساختار داده و مقیاس‌پذیری افقی، گزینه‌های قدرتمندی برای توسعه‌دهندگان C# محسوب می‌شوند. 💡

https://t.me/csharp7
🔵 کوییز #HTML

🟣 موضوع : ‏استفاده از تگ output برای نمایش نتایج

🟢 سوال :

‏کدام ویژگی تگ `<output>` برای مرتبط کردن آن با عناصر فرمی که در محاسبه نتیجه نقش داشته‌اند، استفاده می‌شود؟

گزینه ۱:
`name`

گزینه ۲:
`id`

گزینه ۳:
`for`

گزینه ۴:
`value`



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

🟢 توضیح :

‏ویژگی `for` در تگ `<output>` یک یا چند `id` از عناصر فرم دیگر را می‌گیرد که در محاسبه یا تولید خروجی این تگ نقش داشته‌اند. این ارتباط معنایی برای مرورگر و ابزارهای کمکی مهم است.

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

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

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

‏برای جلوگیری از این اتفاق، همیشه قبل از دسترسی به یک عنصر، طول لیست را بررسی کنید:

if (myList.Count > index)
{
‏ // دسترسی امن به عنصر
var item = myList[index];
}
else
{
‏ // مدیریت خطا: نمایش پیام، ثبت رویداد یا انجام عملیات جایگزین
‏ Console.WriteLine("شاخص خارج از محدوده است.");
}


‏همچنین، در هنگام حذف یا اضافه کردن عناصر، اطمینان حاصل کنید که این عملیات باعث ایجاد وضعیت نامطلوب در برنامه نمی‌شود. استفاده از بلوک‌های try-catch برای گرفتن استثنائات احتمالی، robustness کد شما را افزایش می‌دهد.

try
{
myList.RemoveAt(invalidIndex);
}
catch (ArgumentOutOfRangeException ex)
{
‏ Console.WriteLine($"خطا در حذف: {ex.Message}");
}


‏این رویکردها به شما کمک می‌کنند تا برنامه‌های پایدارتری با C# توسعه دهید. 🛡️💡

https://t.me/csharp7
🔑 امنیت اطلاعاتت برات مهمه؟

‏با پایتون و کتابخونه `cryptography` یه Encryption ساده یاد بگیر!

```python
from cryptography.fernet import Fernet

key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"My secret message!")
print(token)
```

‏حالا چجوری decrypt کنیم؟ 🤔

```python
f.decrypt(token)
```

‏به همین سادگی! 🛡️
#پایتون #امنیت #encryption

https://t.me/python7ir
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

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

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

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏Base64Url با Base64 استاندارد چه فرقی داره؟ 🤔

‏توی Base64 استاندارد ممکنه کاراکترهای + و / ببینید. این‌ها توی URL مشکل‌ساز میشن. Base64Url این کاراکترها رو با - و _ جایگزین می‌کنه تا بشه مستقیم توی URL استفاده کرد. ⛓️

‏پس دفعه بعد خواستی یه چیزی رو Base64 کنی و توی URL بذاری، حواست به این نکته باشه! 😉

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

🟣 موضوع : ‏الگوریتم: مفهوم، اهمیت و مثال‌های کاربردی

🟢 سوال :

‏کدام یک از موارد زیر یک مثال از الگوریتم است؟

گزینه ۱:
‏طراحی رابط کاربری

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

گزینه ۳:
‏مدیریت پایگاه داده

گزینه ۴:
‏طراحی سخت‌افزار



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

🟢 توضیح :

‏مرتب‌سازی یک لیست از اعداد یک مثال از الگوریتم است.

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

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

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

آدرس وبسایت:
https://Tutorial24.ir
‏در C#، مدیریت محدوده (scope) و عمر (lifetime) متغیرها برای جلوگیری از خطاها حیاتی است. متغیرها فقط در محدوده بلاکی که تعریف شده‌اند (مثلاً داخل یک متد یا حلقه) قابل دسترسی هستند.

‏اشتباه رایج: تلاش برای دسترسی به متغیری خارج از محدوده تعریفش.

‏مثال:
public void ExampleMethod()
{
‏ int x = 10; // x فقط در این متد معتبر است
if (true)
{
‏ int y = 20; // y فقط داخل این شرط معتبر است
‏ Console.WriteLine(x + y); // درست است
}
‏ // Console.WriteLine(y); // خطا: y در اینجا معتبر نیست
}


‏چالش دیگر: عمر متغیرها. متغیرهای محلی (local variables) با پایان اجرای بلاک خود از بین می‌روند. متغیرهای نمونه (instance variables) تا زمانی که شیء مرتبط با آن‌ها در حافظه باشد، باقی می‌مانند.

‏دقت به این جزئیات، کدنویسی تمیزتر و باگ کمتر را تضمین می‌کند. 💡📚

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

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

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏یکی از تفاوت‌های کلیدی بین LINQ و کوئری‌نویسی سنتی در C#، خوانایی و مختصر بودن کد است.

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

‏مثال: فیلتر کردن اعداد زوج در یک لیست

‏روش سنتی:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
List<int> evenNumbers = new List<int>();
foreach (int number in numbers)
{
if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}


‏با استفاده از LINQ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();


‏همانطور که می‌بینید، LINQ کد را کوتاه‌تر و درک آن را آسان‌تر می‌کند. 🚀

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

‏با تحلیل این اطلاعات، می‌توان نقاط ضعف و گلوگاه‌های عملکردی را شناسایی کرد. به عنوان مثال، ممکن است یک کوئری به طور مکرر جداول زیادی را اسکن کند یا از ایندکس‌های نامناسبی استفاده کند. با استفاده از نتایج profiling، می‌توان با اعمال تغییراتی مانند افزودن ایندکس‌های مناسب، بازنویسی کوئری‌ها، یا بهینه‌سازی ساختار پایگاه داده، عملکرد برنامه را به طور قابل توجهی بهبود بخشید.

‏برخی از ابزارهای رایج برای profiling عبارتند از:

SQL Server Profiler (برای پایگاه داده‌های SQL Server)
Entity Framework Profiler (برای برنامه‌هایی که از Entity Framework استفاده می‌کنند)
Dapper Profiler (برای برنامه‌هایی که از Dapper استفاده می‌کنند)
General Database Tools (مانند pgAdmin برای PostgreSQL یا MySQL Workbench برای MySQL که ابزارهای profiling داخلی دارند)

‏این ابزارها معمولاً به شما اجازه می‌دهند تا کوئری‌های کند را شناسایی کرده و جزئیات اجرای آن‌ها را مشاهده کنید. 📊📈🔍

‏به عنوان مثال، در SQL Server Profiler می‌توانید رویدادهایی مانند SQL:BatchStarting و SQL:BatchCompleted را رصد کنید تا زمان اجرای دستورات SQL را بسنجید. همچنین، با فعال کردن نمایش Show All Columns و انتخاب ستون‌هایی مانند Duration، CPU، و Reads، می‌توانید اطلاعات دقیقی از عملکرد کوئری‌ها به دست آورید.

SELECT
c.CustomerID,
c.CompanyName,
COUNT(o.OrderID) AS NumberOfOrders
FROM
Customers AS c
LEFT JOIN
Orders AS o ON c.CustomerID = o.CustomerID
WHERE
c.Country = 'USA'
GROUP BY
c.CustomerID, c.CompanyName
HAVING
COUNT(o.OrderID) > 5;


‏تحلیل خروجی profiling برای کوئری فوق می‌تواند نشان دهد که آیا ایندکس مناسبی بر روی ستون Country در جدول Customers وجود دارد یا خیر، و همچنین نحوه join شدن جداول Customers و Orders چقدر بهینه است. 🚀

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
‏در WinForms، برای اتصال داده به صورت پیشرفته، می‌توان از BindingSource به همراه DataGridView استفاده کرد. این روش امکان مدیریت داده‌ها، مرتب‌سازی، فیلتر کردن و ویرایش را به صورت مستقیم و بدون نیاز به نوشتن کد زیاد فراهم می‌کند.

‏برای مثال، اگر یک لیست از اشیاء دارید، می‌توانید آن را به BindingSource متصل کرده و سپس BindingSource را به DataSource فرم DataGridView اختصاص دهید.

‏// فرض کنید List<MyObject> dataList; از قبل پر شده است.
BindingSource bs = new BindingSource();
bs.DataSource = dataList;

dataGridView1.DataSource = bs;


‏این اتصال دوطرفه است، یعنی تغییرات در DataGridView مستقیماً در dataList منعکس می‌شود و بالعکس. همچنین، با استفاده از قابلیت‌های BindingSource مانند Sort و Filter، می‌توانید به راحتی داده‌ها را مدیریت کنید.

‏برای سناریوهای پیچیده‌تر، مانند اتصال به پایگاه داده، استفاده از TableAdapter و DataSet در کنار BindingSource نیز بسیار رایج است.

https://t.me/csharp7
💡 کامپایلر C# قابلیتی داره به اسم ReadyToRun. با این قابلیت، بخشی از فرایند JIT (تبدیل کد به زبان ماشین) موقع بیلد انجام میشه، نه موقع اجرا. 🚀

‏حالا اگه این رو با trimming (حذف کدهای استفاده نشده) ترکیب کنی، حجم فایل خروجی و زمان startup برنامه خیلی کمتر میشه!

https://t.me/csharp7