| کانال توسعه‌دهندگان سی‌شارپ |
1.03K subscribers
19 photos
3 videos
21 links
⭕️ کانال توسعه‌دهندگان سی‌شارپ دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
بررسی CLR - قسمت سوم

5. وظیفه Memory Manager

هر زبان برنامه‌نویسی با تکنیک‌ها و استراتژی‌های مختلفی با memory ارتباط برقرار می‌کنه؛ در زبان‌هایی مثل C/CPP این کار به صورت کاملا دستی و توسط برنامه‌نویس انجام می‌شه، زبان‌هایی مثل سی‌شارپ و جاوا، به طور خودکار این موضوع رو مدیریت می‌کنن و برنامه‌نویس نیازی به انجام این کار نداره.
نقش Memory Manager مدیریت رم به طور خودکار هست، زمانی که یک متغیر تعریف می‌کنید، یک متغیر رو صدا می‌زنید و یا تغییرش می‌دید، تمام مسائل مربوط به رم توسط Memory Manager کنترل میشه.

6. وظیفه GC
GC: Garbage Collector

توی قسمت قبل گفتیم که وظیفه ساخت متغیر و ... به عهده memory manager هست، اما وظیفه حذف و جابجایی و ... به عهده کیه؟
‏GC مسئول کنترل و حذف دیتای استفاده نشده داخل مموری هست.

7.وظیفه Security Manager

قبل از اجرای کدهای شما، CLR ملزم به چک کردن Permission های مورد نیاز برنامه، بررسی سالم بودن و الوده نشدن کدها توسط عوامل خارجی و ... هست. تمام این کارها توسط Security Manager انجام می‌شه.


8.وظیفه Thread Manager

ساخت Thread اصلی برنامه یا Main Thread، قابلیت ایجاد و دسترسی به sub-thread ها و کنترل ThreadPool به عهده این سرویس هست.


9.وظیفه Exception Manager

وقتی یک Exception رخ می‌ده، تمام اطلاعاتی که همراهش ایجاد می‌شه مثل stack trace، اجرای Catch Block، دنبال کردن سلسله مراتب break و return ها، تماماً توسط Exception manager کنترل می‌شه.

#CLR #GC

👤 QWxp

💎 Channel: @DevelopixCSharp
👍5🔥1
معرفی کلمه‌کلیدی unsafe

کاری که این keyword انجام میده اینه که context رو از حالت امن خارج میکنه.

هر کدی که در unsafe context نوشته بشه تضمینی از سمت compiler و CLR برای امن بودنش وجود نداره.

کد امن کدی هست که مستقیم به memory دسترسی نداره، از pointer استفاده نمیکنه، توسط GC مدیریت میشه و کاربر نقشی توی کار با مموری ایفا نمیکنه.
درنتیجه کدهایی که به صورت unsafe نوشته میشه، میتونن دقیقا مثل زبان های C/CPP برنامه نویس رو با مشگلات memory مواجه کنند.
به دو صورت میتونید از unsafe استفاده کنید:

1.modifier:

unsafe void MyFunc(){}

هرچیزی که اینجا تعریف بشه کلا unsafe هست؛

2.scopped (block):

void MyFunc(){
    //safe
    unsafe{
        //unsafe
    }
}
اینجا هرکدی که داخل unsafe block باشه ، طبیعتا unsafe هست و بیرون از این block کد ها safe هستن.

نکته: کلمه unsafe  به خودی خود تاثیری روی IL یا JIT به طور مستقیم نداره، میشه گفت نوشتن این کلمه، صرفا یک مجوز برای کامپایل هست، نه بیشتر.

#unsafe

👤 QWxp

💎 Channel: @DevelopixCSharp
👍7
- معرفی BCL

BCL: Base Class Library

قبلا اشاره کردیم که یکی از بخش های اکوسیستم دات‌نت، کتابخانه های اون هستش.

پکیج هایی که از nuget نصب میکنید، همگی بخشی از این کتابخانه ها هستن، مثلا newtonSoft ، automapper ، dapper و...

اما خود دات‌نت به طور مستقل یک کتابخانه مشترک و عمومی در اختیار توسعه دهنده قرار میده که اصطلاحا بهش BCL یا CL میگن؛ BCL بخشی از FCL هست که به طور مشترک در بین تمامی نسخه های دات‌نت وجود داره،
مواردی مثل data type ها مثل string, int, bool و List, Dictionary و تمام موارد این چنینی بخشی از BCL هستن،

درواقع BCL ، اولین خطی هست که توی برنامتون مینویسید(معمولا):
using System;

تمام type ها ، utility ها و بیشتر چیزهایی که از این namespace میاد، بخشی از BCL هست، مثلا:

System.Collections
System.Linq
System.Net
یا کلاس های HttpClient یا Stream

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

- معرفی FCL

FCL : Framework Class Library

مورد قبلی که بهش اشاره کردیم، Base بود ولی الان که کلمه framework رو دیدید احتمالا حدس میزنید که چه فرقی دارن، کاملا اشتباه حدس زدید، FCL مخصوص نسخه های .net framework نیست ، در واقع هیچ ربطی به اسمش نداره (باز هم نامگذاری های مایکروسافت).

‏FCL به تمام کد ها و کتابخانه های ارائه شده توسط دات‌نت گفته میشه، هر کدی که توسط مایکروسافت نوشته شده، توی این دسته قرار میگیره، مثلا asp.net ، wpf, winform و همچنین خود BCL همگی بخشی از FCL هستن؛

پس FCL یک مجموعه کلی از کتابخانه ها و ابزار های مایکروسافت هست که BCL فقط بخشی از اون هست.

اما چه فرقی میکنن ؟ چرا همشون یکجا توی BCL نیستن ؟
همونطور که بالاتر گفتم، BCL توی تمامی نسخه های دات‌نت وجود داره، فرقی نمیکنه سیستم عامل هدف چیه، cpu چی هست یا کدتون اصلا روی یخچال خونه میخواد اجرا بشه یا جای دیگه، هرجا که دات‌نت هست، تمامی کتابخانه های BCL وجود دارن؛
اما FCL محدود به محیط هست، شما طبیعتا روی یک یخچال نمیتونید WPF یا Winform اجرا کنید، اگر دات‌نت ورژن بخصوصی برای یخچال داشته باشه، قطعا شامل System.Windows نمیشه.
خب پس تمام مواردی که بین نسخه های مختلف دات‌نت مشترک هستند، بخشی از BCL هستند؛ و تمام مواردی که مشترک نیستند بخشی از FCL.

#CLR

👤 QWxp

💎 Channel: @DevelopixCSharp
👍9🔥1
چندتا ترفند یاد بگیری بد نیست :

1- پشت string هایی که می‌نویسی «
$@
» قرار بده تا خیلی از کدهات خلاصه بشه (دقیقاً به همین ترتیب، جا به جا بنویسی ارور می‌ده) مثال :
string test = $@"";

خب اول باید بگم $ چیکار می‌کنه؟ شما می‌تونی متغیر رو خیلی خواناتر توی string خودت قرار بدی! مثلاً:
string name = Console.ReadLine();
string test = $"hello { name }";
داخل قلاب (curly bracket) هر چقدر فاصله بزاری تاثیری نداره، ولی بیرون curly bracket داخل string قطعاً تاثیر گذاره!

2- خب حالا می‌رسیم به @ که خیلی کاربردی تر از قبلیه! حالا می‌گم چرا:)

دوتا از فایده‌هایی که @ داره رو اینجا معرفی می‌کنم:

اولاً که باعث می‌شه توی absolute path های فایل ویندوز به مشکل نخوری! مثلا ببین:
string test = $@"C:\windows\system";
اگر توی کد بالا @ رو برداری خطا می‌ده و این به خاطر اینه که \ رو به عنوان کاراکتر کنترلی می‌شناسه و بعدش باید یه سری کاراکتر خاص بیاد ولی وقتی @ می‌زاری این خطا رفع می‌شه!

دومین فایده @ پشت string اینه که م‌یتونی یک string رو تقسیم کنی و توی چندین خط بنویسی، در حالی که string واحد داری (یکی از پر کاربرد‌ترین استفاده‌هاش توی نوشتن sql query هست) مثلاً:

string test = $@"select * from [table]
where [column] = {someData}";
قبلاً برنامه نویسا باید کلی
""+
""+
.
.
.
می‌نوشتن، ولی خب @ اومد و کار برنامه نویسا رو راحت تر کرد:)))

3- این موردی که می‌خوام بگم تقریباً همه جا کاربردی هست، و شاید در نگاه اول تاثیرگذار نباشه ولی به خودت میای و می‌فهمی داری نصف وقتت رو ازش استفاده می‌کنی:)
برای اینکه به اول یه کلمه یا اخر کلمه بری می‌تونی دکمه Ctrl رو نگه داری! اره، می‌دونم خیلی ساده هست ولی کاربردی‌تر از اونی هست که فکرش رو بکنی (چمیدونم مثلاً داری نام متغیر یا فایل رو تغییر میدی و یا توی مرورگرت یه کلمه رو اشتباه نوشتی و...).

4- مورد چهارم رو خلاصه بگم:
می‌تونی توی سی‌شارپ توابع تک خطی داشته باشی، حالا چه بدردت می‌خوره، خب معلومه! کدت رو خواناتر می‌کنه! مثلا به این کد توجه کن:
if(data != null)
{
//codes
}
خواناتر هست یا این کد:
private bool CheckNotNull(data) => data != null;
.
.
if(CheckNotNull())
{
//codes
}

یادت باشه مهم‌تر از این که کد قابل اجرا بنویسی، باید کد قابل توسعه (maintainable) و خوانا بنویسی! یعنی بعد یه ماه برگشتی سر کدت چشمت از حدقه نزنه بیرون :))
یه نام درست و حسابی برای متغیر، توابع، کلاس ها، اینترفیس ها و... انتخاب کن، شاید الان متوجه نشی ولی قطعا بعدا متوجه اهمیتش میشی!!
به جای اینکه زیر کدت یه کامنت برای توضیح کدت قرار بدی، کدت رو خواناتر کن و کامنت رو پاک کن.
می‌دونم که شاید به حرفام بخندی، اما خب به وقتش می‌فهمی چقدر مهم هستن!

همیشه یادت باشه:
«اشک‌هایی که به خاطر باگ امروز می‌ریزی، عرق‌هایی هستن که برای نوشتن کد تمیز نریختی»

👤 MrKaveh

💎 Channel: @DevelopixCSharp
👍91
تفاوت <Task <T و <ValueTask<T

همونطور که میدونید هر عملیات Asynchronous نیازمند یک return type از نوع Task هست، اما یک نوع دیگه هم به اسم ValueTask وجود داره که احتمالا قبلا دیدید.
این ابجکت درواقع یک Discriminated Union هست که به زبان ساده، میتونه چندین type مختلف از دیتا رو در خودش نگه داری کنه، که توی زبان هایی مثل Typescript, Rust, FSharp و ... وجود داره، البته کار ValueTask نگه داری چند type مختلف برای شما نیست! اما چرا این type وجود داره ؟
این تابع رو تصور کنید:

async Task<int> GetFollowers(string? username)
{
    if (string.IsNullOrEmpty(username))
        return -1;

    if (!_validateRegex.IsMatch(username))
        return -2;
   
    return await GetInstagramFollowers(username);
}
زیاد پیچیده نیست، صرفا یک username به عنوان ورودی میگیره و تعداد فالور های اون کاربر رو برمیگردونه؛
اما کد ما چه مسیر هایی رو میتونه طی کنه ؟
خب ممکنه در مرحله اول ورودی ما خالی یا null باشه که با شرط اول کد تموم میشه؛
ممکنه خالی نباشه اما یک username معتبر نباشه که توی شرط دوم برسی میشه و کد دوباره تموم میشه

و حالت خوشحال کننده که username معتبر هست و فالور های اون به کاربر نشون داده میشه؛

- خب، اینا چه ربطی به ValueTask داشت ؟

ربطی نداشت واقعا، اما پیش زمینه بود؛ چند تا از این مسیر ها ، به کد asynchronous ختم میشه ؟ فقط یکیشون!
همون مسیر خوشحال کننده که درنهایت یک درخواست احتمالا به API یا DB فرستاده میشه، اما ما برای هر سه مسیر داریم یک Task برمیگردونیم!

- خب، مشکلش چیه؟

هیچ مشکلی نداره، مشکل جایی به وجود میاد که این متد صد ها هزار بار یا بیشتر صدا زده بشه، برای هر بار اجرای این متود، شما یک ابجکت اضافه، جدای از تعداد فالور های کاربر ذخیره میکنید، بله خود Task که از آسمون نازل نمیشه، اون هم داخل Heap ذخیره میشه درست مثل بقیه Object ها، اون هم درصورتی که اینجا ما فقط توی یک مسیر ازش استفاده کردیم، درواقع دو مسیر دیگه، منابع اضافه مصرف میکنن!!
و خب اینکار در دنیای ما، جنایت به حساب میاد؛ اما اینجاست که ValueTask به دردمون میخوره، اگه تابع شما به جای Task ، صرفا ValueTask برگردونه، در دو مسیر دیگه که کد به درخواست asynchronous منتهی نمیشن، صرفا مقدار خالص رو به شما میده، و در مسیر اخری که کد ما به await کردن و درخواست I/O میرسه، یک Task به شما برمیگردونه.

درواقع در لایه زیرین شما همچین چیزی دارید:
ValueTask<Task<T>,T>
که یا میتونه T باشه یا <Task <T

اگر واقعا Task اتون به خطوط async برسه، یک Task دارید، و اگر صرفا در مراحل قبل از اون به اتمام برسه، یک T به صورت مستقیم دارید:
async ValueTask<int> GetFollowersAsync(string? username)
{
    if (string.IsNullOrEmpty(username))
        return -1; //int

    if (!_validateRegex.IsMatch(username))
        return -2; //int
   
    return await GetInstagramFollowers(username); //Task<int>
}
درنتیجه، شما در دو مسیر، از مصرف بیخود منابع جلوگیری میکنید، که توی تعداد درخواست های بالا میتونه زندگیتون رو نجات بده؛
کاربرد های مختلفی برای ValueTask وجود داره، از معروف هاش میشه به سیستم caching اشاره کرد، اما صرفا شرط ساده ای که باید به خاطر بسپارید:

"اگر کد، چندین مسیر مختلف داره و بعضی از اون مسیر ها میتونن به کد async یا sync منتهی بشن، ValueTask میتونه مورد خوبی برای بهینه کردن کد باشه"

و البته محدودیت هایی هم برای استفادش وجود داره:

-برخلاف Task ها، ValueTask ها نباید بیشتر از 1 بار await بشن!
-بیشتر از 1 بار نباید از AsTask بر روی ValueTask استفاده کنید!
-استفاده از Result. یا ()GetAwaiter().GetResult زمانی که هنوز عملیات به اتمام نرسیده یا بیشتر از یک بار استفاده بشن( کلا از اینها هیچوقت استفاده نکنید، چه Task و چه ValueTask )

#performance #async #task

👤 QWxp

💎 Channel: @DevelopixCSharp
👍14👎31
در سی‌شارپ، توابعی که خروجی Task دارند ولی از کلمه‌کلیدی async درآن‌ها استفاده نشده در واقع sync هستند.
در مثالی که در تصویر میبینید شاید تصور شود که متد Example باید در پس زمینه اجرا شود، ولی این اتفاق نمی‌افتد و کاملا به صورت sync اجرا خواهد شد. این تابع در واقع مثل بقیه‌ تابع های sync فقط یک خروجی Task دارد، مثل تابع زیر:
static string Example()

#Task
#Async

👤 Mahdiyar

💎 Channel: @DevelopixCSharp
👍121🔥1
Forwarded from Developix Support
📌 اگر دنبال تبدیل شدن به یک برنامه‌نویس مطرح در دنیای فریلنسری و کسب درآمد بیشتر هستی، شرکت در این کارگاه رو از دست نده!

💻 کارگاه تجارت بین‌المللی برای برنامه‌نویس‌ها؛
(فریلنسرینگ حرفه‌ای در مقیاس جهانی)

🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین
(2 جلسه حضوری و 5 جلسۀ آنلاین)

📝 اطلاعات بیشتر و ثبت‌نام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آی‌دی ما پیام بدی!

🆔 @MaktabSharif_Admin

🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
This media is not supported in your browser
VIEW IN TELEGRAM
📌 دوره آنلاین سئو برای مدیران، آخرین روز ثبت‌نام با تخفیف ویژه

🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو


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

پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.

اطلاعات بیشتر و ثبت‌نام در ایسمینار:
🌐 eseminar.tv/wb116105

کد تخفیف: talebi

فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.

هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جت‌سئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.

فقط امروز

☑️ @kar_kasb
👎2
پشتیبانی از Visual studio بر روی Mac متوقف شد

حدود 2 روز پیش مایکروسافت اعلام کرد که پشتیبانی از ویژوال استودیو برای مک، تا سال آینده، همین موقع متوقف خواهد شد.(31 August)

طبق گفته مایکروسافت آپدیت های جدید دیگه منتشر نمیشه ولی همچنان به رفع باگ و مشکلات امنیتی تا سال اینده ادامه میدن.

تیم مایکروسافت همچنین پیشنهاد کرده توسعه دهندگانی که روی مک هستن، بجای ویژوال، از vs code و افزونه جدیدی که چند مدت پیش تحت عنوان C# Dev Kit منتشر شده بود استفاده کنن، یا ویژوال رو داخل ویندوز از طریق ماشین مجازی یا cloud استفاده کنن.

-خودم پیشنهاد میکنم از Rider استفاده کنید اگه منابع مورد نیازش رو دارید.

مایکروسافت دلیل این "بازنشستگی" رو، تمرکز روی بهینه سازی و optimize کردن ویژوال اعلام کرده.

#vs
👤 QWxp

💎 Channel: @DevelopixCSharp
🔥10👍51
Forwarded from Developix Support
This media is not supported in your browser
VIEW IN TELEGRAM
دایناسورها در حال خرید در تهران 🤯

⚡️هیچ‌وقت فکرشو میکردی که همچین تصویری رو ببینی؟

⚡️از آینده به تو سلام 😁

💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!

همین‌الان بهش پبام بده تا عکسش رو برات بفرسته😇

فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot

🌀هوش‌مصنوعی با پیشرفت فوق‌العادش داره همه دنیار رو فرا میگیره 😉🤯
👍2👎2
🌀 کامپوننت تقویم فارسی برای استفاده در MAUI 🌀

🔗 لینک این کامپوننت در گیت‌هاب

#معرفی_ابزار

👤 MHReza

💎 Channel: @DevelopixCSharp
👍13
اولین نسخه RC برای دات‌نت 8 منتشر شد.

تیم دات‌نت هم بجز System.Text.Json هیچ دغدغه دیگه ای نداره خداروشکر و به طور وحشیانه ای فیچر اضافه میکنن بهش

لینک معرفی

دانلود

مقایسه پرفورمنس (خیلی خلاصه نوشته)

👤 QWxp

💎 Channel: @DevelopixCSharp
👍6
🌀 معرفی switch expression‏ 🌀

🔸 توی نسخه سی‌شارپ هشت این switch expression ها معرفی شدن که باعث می‌شه دستورات سوییچ خودمون رو خوانا‌تر بکنیم. بریم یه مثال ببینیم از قبل و بعد از استفاده از این switch expression ها.

🔹 توی این مثال از حالت عادیمون استفاده می‌کنیم.

int number = 1;

string result = "";

switch (number)
{
case 1:
result = "One";
break;
case 2:
result = "Two";
break;
case 3:

default:
result = "Default case";
break;
}

🔸حالا بریم با switch expression بازنویسیش کنیم.

int number = 1;

string result = number switch
{
1 => "One",
2 => "Two",
_ => "Default case"
};

🔹 می‌بینید که چقد کدمون رو کوتاه‌تر و خوانا‌تر کرده.

#Tips

👤 MHReza

💎 Channel: @DevelopixCSharp
👍195🔥2
معرفی کتابخانه RazorSlices

این کتابخانه یک template سبک و سریع برای asp.net core minimal api ساخته شده، بدون نیاز به استفاده از MVC، بهینه شده برای رندر کردن HTML در Razor یا Blazor.

برای شروع:
1.کتابخانه را نصب کنید
$ dotnet add package RazorSlices

2.یک دایرکتوری به نام Slices توی پروژتون ایجاد کنید، و داخل اون یک فایل به نام ViewImports.cshtml_ با این محتوا ایجاد کنید:
@inherits RazorSliceHttpResult
@using System.Globalization;
@using Microsoft.AspNetCore.Razor;
@using Microsoft.AspNetCore.Http.HttpResults;
@tagHelperPrefix disable_tagHelpers:
@removeTagHelper *, Microsoft.AspNetCore.Mvc.Razor
3. یک cshtml.* دیگه داخل دایرکتوری Slices ایجاد کنید :

@inherits RazorSliceHttpResult<DateTime>
<p>
Hello from Razor Slices! The time is @Model
</p>

4.حالا به راحتی داخل minimal api اتون صفحات HTML رو رندر کنید:

app.MapGet("/hello", () => Results.Extensions.RazorSlice("/Slices/Hello.cshtml", DateTime.Now));

🧷درحال حاضر موارد زیر در این کتابخانه پشتیبانی نمیشند:
1.پشتیبانی از AOT
2.پشتیبانی از Hot Reload
3.پشتیبانی از Layout ها و Section ها

#asp #razor

👤 QWxp

💎 Channel: @DevelopixCSharp
👍9
توصیه می‌کنم این پلی‌لیست رو در یوتیوب حتماً دنبال کنید.
مطالب خوبی در مورد EF Core منتشر میکنه.

🔗 لینک

👤 MHReza

💎 Channel: @DevelopixCSharp
👍10
احتمالا شده که خواستید یه کدی رو تست کنید، ولی نمی‌خواید به خاطرش به پروژه ایجاد بکنید. ابزار CSharpRepl اینجا بدردتون می‌خوره.

این ابزار بهتون کمک می‌کنه کدتون رو توی محیط کامند لاین تست کنید. برای نصبش می‌تونید دستور
dotnet tool install -g csharprepl

رو داخل ترمینالتون وارد کنید.

با وارد کردن دستور csharprepl وارد محیط کامند لاین میشید و می‌تونید هر کدی رو بنویسید.

اگه بخواید پکیجی رو هم نصب کنید با این دستور می‌تونید اون رو نصب کنید، برای مثال دستور زیر رو ببینید:

#r "nuget: Newtonsoft.Json"


با این دستور پکیج Newtonsoft.Json براتون نصب می‌شه

برای اطلاعات بیشتر در مورد این ابزار می‌تونید به صفحه گیت‌هابش مراجعه کنید و بیشتر در موردش مطالعه کنید.

👤 MHReza

💎 Channel: @DevelopixCSharp
👍12🔥31
به‌زودی دات‌نت 8 منتشر میشه 🎉 با کلی قابلیت های جدید ( که بیشترشون قرار نیست به دردمون بخوره👌).
توی چند روز آینده قراره کنفرانس های متعددی توسط مایکروسافت در این رابطه برگذار بشه.

اولیش فردا هست، میتونید توی یوتوب از این لینک تماشا کنید.

👤 QWxp

💎 Channel: @DevelopixCSharp
👍123
دات نت 8 به طور رسمی منتشر شد
لینک دانلود:

https://dotnet.microsoft.com/en-us/download/dotnet/8.0

👤 QWxp

💎 Channel: @DevelopixCSharp
👍82🔥1
لایو دوم مربوط به انتشار دات نت که امشب ساعت هشت هست رو میتونید از لینک زیر تماشا کنید
https://www.youtube.com/watch?v=vU-iZcxbDUk


👤 QWxp

💎 Channel: @DevelopixCSharp
👍41
احتمالا شده که موقع کار با Minimal API ها نیاز شده که یه سرویسی رو اینجکت کنید و ازش استفاده کنید.

با اتریبیوت [FromServices] مانند کد بالا می‌تونید اون سرویس رو از DI container بگیرید و داخل کدتون استفاده کنید.

👤 MHReza

💎 Channel: @DevelopixCSharp
3👍3🔥2
توی Minimal API ها بعضی وقت‌ها پارامترهاتون زیاد میشه و خوانایی کدتون رو پایین‌تر میاره، می‌تونید مثل عکس بالا اون‌ها رو توی یک رکورد تعریف کنید و با اتریبیوت [AsParameters] از اون استفاده کنید.

👤 MHReza

💎 Channel: @DevelopixCSharp
👍142🔥2