زبان C#
C#C# زبان بزرگی است و بیشتر آموزشها در سطح نحو متوقف میشوند. این مسیر تا جایی میرود که بدانی پشت async/await چه میگذرد، چرا آن LINQ کند است، و کِی struct بهجای class.
پیشرفت تو
درصد هر فصل از دو چیز میآید: چقدر از بخشهایش را خواندهای (۵۵٪) و چند تمرینش را تیک زدهای (۴۵٪). همهچیز داخل مرورگر خودت میماند.
فصل
فصلها به هم وابستهاند و ترتیبشان معنا دارد. هر مسیر با پروژههای نهایی تمام میشود: ساده، متوسط، پیچیده.
اکوسیستم داتنت
SDK، runtime، پروژه، و اینکه dotnet build دقیقاً چه میکند.
در نوبت نوشتننوعها: value و reference
پشته و هیپ، کپی در برابر ارجاع، و boxing.
در نوبت نوشتنnullable reference types
کامپایلری که NullReferenceException را قبل از اجرا میگیرد.
در نوبت نوشتنکلاس، record و struct
سه انتخاب با سه معناشناسی متفاوت — و معیار انتخاب.
در نوبت نوشتنوراثت و interface
virtual، abstract، sealed و پیادهسازی پیشفرض interface.
در نوبت نوشتنعضو ایستا، const و readonly
تفاوتهایی که در زمان کامپایل و اجرا اثر دارند.
در نوبت نوشتنبرابری و hash
Equals، GetHashCode، == و قراردادهایی که شکستنشان گران است.
در نوبت نوشتنعملگر و تبدیل نوع
بارگذاری عملگر، implicit و explicit.
در نوبت نوشتنgeneric و constraint
نوع بهعنوان پارامتر، بدون از دست دادن ایمنی یا کارایی.
در نوبت نوشتنvariance: in و out
چرا List<Derived> یک List<Base> نیست.
در نوبت نوشتنstatic abstract و ریاضی عمومی
عضو ایستای انتزاعی در interface — قابلیت تازهٔ زبان.
در نوبت نوشتنمجموعهها
List، Dictionary، HashSet، Queue — و پیچیدگی زمانی هرکدام.
در نوبت نوشتنiterator و yield
تولید تنبل، و ماشین حالتی که کامپایلر میسازد.
در نوبت نوشتنLINQ ۱: مبانی و اجرای معوق
چرا کوئری تو هنوز اجرا نشده است.
در نوبت نوشتنLINQ ۲: عملگرهای پیشرفته
GroupBy، Join، SelectMany، Aggregate و دامهای کارایی.
در نوبت نوشتنexpression tree
کد بهعنوان داده — پایهای که EF Core رویش ساخته شده.
در نوبت نوشتنdelegate، event و lambda
تابع بهعنوان مقدار، و الگوی رویداد.
در نوبت نوشتنclosure و دامهایش
متغیر ربودهشده در حلقه — کلاسیکترین باگ.
در نوبت نوشتنpattern matching
switch expression، الگوی ویژگی، لیست و رابطهای.
در نوبت نوشتنخطا و exception
کِی بگیر، کِی نگیر، filter و خطای سفارشی.
در نوبت نوشتنIDisposable و IAsyncDisposable
using، الگوی dispose و منابعی که GC نمیگیرد.
در نوبت نوشتنasync/await: مدل ذهنی
async یعنی «نخ را نگه ندار»، نه «سریعتر».
در نوبت نوشتنTask و cancellation
WhenAll، WhenAny، CancellationToken و مهلت.
در نوبت نوشتندامهای async
async void، بنبست، ConfigureAwait و sync over async.
در نوبت نوشتنValueTask و IAsyncEnumerable
جریان ناهمگام و کاهش تخصیص.
در نوبت نوشتنChannel
تولیدکننده و مصرفکننده، با فشار برگشتی.
در نوبت نوشتننخ، قفل و atomic
lock، Interlocked، مدل حافظه و مسابقهٔ داده.
در نوبت نوشتنSpan و Memory
کار با حافظه بدون کپی و بدون تخصیص.
در نوبت نوشتنتخصیص و زبالهروب
نسلها، LOH، و اینکه چرا کد تو مکث میکند.
در نوبت نوشتنSystem.Text.Json
سریالسازی، تبدیلگر سفارشی و منبع تولید.
در نوبت نوشتنزمان و تاریخ
DateTimeOffset، TimeProvider، منطقهٔ زمانی و تقویم فارسی.
در نوبت نوشتنعبارت باقاعده
Regex، منبع تولید، و خطر بازگشت فاجعهبار.
در نوبت نوشتنreflection و attribute
قدرت زمان اجرا، و هزینهاش.
در نوبت نوشتنsource generator
کد تولید کن بهجای reflection — سریعتر و AOT-پسند.
در نوبت نوشتنanalyzer و قواعد کد
قانون تیمی که کامپایلر اجرایش میکند.
در نوبت نوشتنinterop و P/Invoke
فراخوانی کد بومی و LibraryImport.
در نوبت نوشتنتست با xUnit
fixture، تست پارامتری، mock و assertion خوانا.
در نوبت نوشتنbenchmark
BenchmarkDotNet: اندازهگیری قبل از بهینهسازی.
در نوبت نوشتنساختار پروژه و NuGet
چند پروژه، وابستگی مرکزی و انتشار بسته.
در نوبت نوشتنپروژهٔ ۱ — ابزار خط فرمان
CLI واقعی با آرگومان، خطا، لاگ و تست.
در نوبت نوشتنپروژهٔ سادهپروژهٔ ۲ — کتابخانهٔ قابل انتشار
API تمیز، تست کامل، benchmark و بستهٔ NuGet.
در نوبت نوشتنپروژهٔ متوسطپروژهٔ ۳ — پردازشگر همروند پرکار
Channel، async، cancellation، pooling و کارایی اندازهگیریشده.
در نوبت نوشتنپروژهٔ پیچیده