آنچه در دورهی آموزشی برنامهنویسی با C# خواهید آموخت:
فصل 1: معرفی زبان C# و فریمورک .NET
فصل اول این دورهی آموزشی در حکم ستون فقرات سایر فصول و مطالب این دوره است. هدف اصلی این
فصل معرفی تعدادی از مهمترین مولفههای ساختاری پلتفرم .NET از جمله Common
Language Runtime یا CLR و Common Type System یا CTS و Common Language Specification یا
CLS و نیز Base Class Libraries یا BCL است. به علاوه، در این فصل نگاهی به زبان
برنامهنویسی C# و مفهوم فضای نام (namespace) و اسمبلیهای .NET نیز
خواهیم داشت.
فصل 2: ساخت اپلیکیشنهای C#
هدف این فصل تشریح فرایند کامپایل کد C# است. بعد از نصب runtimes و .NET
SDK با IDE قدرتمند ویژوال استودیو و بخصوص نسخهی رایگان آن یعنی Visual Studio
Community آشنا خواهیم شد و همینطور ویرایشگر هوشمند Visual Studio Code را نیز معرفی
خواهیم کرد. در این فصل یاد خواهید گرفت که چطور اپلیکیشنهای .NET را با استفاده
از این دو ابزار ایجاد، اجرا و دیباگ کنید.
فصل 3: ساختارهای برنامهنویسی در C# (1)
در این فصل رسماً کار با زبان برنامهنویسی C# را شروع میکنیم. مطالبی مانند نقش
متد Main() و جزئیات متعددی در مورد نوعهای دادهای (data types)
در .NET که به اختصار نوع یا type نامیده میشوند و روش تعریف متغیرها بیان خواهد
شد. همچنین، با دو نوع برای کار با دادههای متنی یعنی String و StringBuilder آشنا خواهید
شد. علاوه بر اینها، با ساختارهای تصمیم و تکرار در C# آشنا شده و در مورد pattern
matching و اَعمال narrowing و widening و نیز کلمه کلیدی unchecked نیز صحبت خواهیم کرد.
فصل 4: ساختارهای برنامهنویسی در C# (2)
در این فصل بررسی جنبههای اساسی C# را ادامه داده و در ابتدا با آرایهها و نحوهی
ایجاد و دستکاری آنها آشنا میشویم. در ادامه با روش ایجاد متدهای سربارگذاریشده
(overloaded) و همچنین، تعریف پارامترهای متد با استفاده از کلمات کلیدی out، ref و
params
آشنا میشویم. علاوه بر این، با نوعهای enum و struct و نوعهای پوچپذیر (nullable types)
آشنا میشویم و تفاوت بین نوعهای مقداری و ارجاعی را شرح خواهیم داد. در نهایت نیز تاپلها
(tuples) را معرفی میکنیم.
فصل 5: مفهوم کپسولهسازی (Encapsualtion)
این فصل شروعی بر برنامهنویسی شیگرا با استفاده از زبان C# محسوب میشود و موضوع
کلی آن یکی از اصول سهگانهی شیگرایی یعنی Encapsulation یا کپسولهسازی است. در این
راستا خواهیم دید که چطور میتوانیم با استفاده از سازندهها (constructors)، مشخصهها
(properties)، اعضای استاتیک (static members)، ثابتها (constants) و فیلدهای فقط خواندنی
(read-only fields) اقدام به ساخت نوعهای کلاس (class types) کنیم. علاوه بر اینها، در
مورد موضوعات دیگری مانند سینتکس object initialization، نعریف نوعهای partial و مشخصههای
خودکار (automatic properties) نیز مطالبی را بیان خواهیم کرد. این فصل با بررسی نوعهای
record به پایان میرسد.
فصل 6: وراثت (Inheritance) و چندریختی (Polymorphism)
در این فصل در مورد دو اصل اساسی دیگر برنامهنویسی شیگرا یعنی وراثت (inheritance) و
چندریختی (polymorphism) صحبت میکنیم. این مفاهیم به ما امکان ساخت یک خانواده از کلاسهای
مرتبط را میدهند. ضمن این کار، با نقش متدهای مجازی (virtual methods)، متدها و کلاسهای
انتزاعی (abstract) و مفهوم پشتیبانی ذاتی اینترفیسها از چندریختی نیز آشنا میشویم. سپس
در مورد pattern matching با استفاده از کلمه کلیدی is صحبت خواهیم کرد و در نهایت با نقش
کلاس پایه نهایی در پلتفرم .NET Core یعنی Object آشنا خواهیم شد.
فصل 7: مدیریت خطا و استثنا
هدف این فصل بحث در مورد نحوهی مدیریت باگها و خطاهای زمان اجرا است که از آنها با نام
استثنا (Exception) یاد میشود. علاوه بر آشنایی با کلمات کلیدیای که C# بدین
منظور تدارک دیده (try, catch, finally, when) تمایز بین استثناهای سطح سیستم و سطح
اپلیکیشن را نیز درک خواهید کرد. همچنین، خواهید دید که چطور میتوانیم ویژوال استودیو را
طوری تنظیم کنیم تا همهی استثناهایی که از چشم ما دور ماندهاند را نیز به دام اندازد.
فصل 8: کار با اینترفیسها (Interfaces)
در این فصل درک خود از توسعهی شیگرا را با پوشش مبحث اینترفیسها و برنامهنویسی مبتنی بر
اینترفیس افزایش میدهیم. یاد خواهیم گرفت که چگونه کلاسها و ساختارهایی را تعریف کنیم که
میتوانند از چندین رفتار مختلف پشتیبانی کنند، چطور این رفتارها را در زمان اجرا به کار
بگیریم و چطور بخشی انتخابی از این رفتارها را با استفاده از پیادهسازی صریح
اینترفیس پنهان کنیم. علاوه بر ایجاد تعدادی اینترفیس سفارشی خواهیم دید که چطور
اینترفیسهای موجود در پلتفرم .NET را پیادهسازی کنیم. به این ترتیب، یاد
میگیریم که چطور اشیایی بسازیم که قابل ذخیرهسازی، کپی و مقایسه باشند.
فصل 9: مفهوم طول عمر شیء (Object Lifetime)
در این فصل با نحوهی عملکرد CLR در بحث مدیریت حافظه (memory management) و ابزار Garbage
Collector یا GC آشنا خواهیم شد. پس از درک مفاهیم مقدماتی در این حوزه، مباحث اشیاء
disposable و فرایند finalization را دنبال خواهیم کرد. این فصل
کلاس Lazy<T> را نیز معرفی میکند که به ما امکان میدهد دادههایی را تعریف
کنیم که تخصیص آنها تا زمانی که توسط یک caller درخواست شوند، به تعویق بیفتد.
فصل 10: کالکشنها و جنریکها (Generics)
در این فصل با جنریکها آشنا خواهیم شد. همانطور که خواهید دید، برنامهنویسی جنریک به ما
امکان میدهد که نوعها و اعضایی را ایجاد کنیم که شامل یک یا چند placeholder باشند که
تعیین آنها به caller واگذار میشود. جنریکها کمک قابل توجهی به افزایش کارایی
(performance) و امنیت نوع (type safety) میکنند. علاوه بر بررسی نوعهای جنریک متعدد در
System.Collections.Generic، یاد میگیرید که چطور نوعها و متدهای جنریک سفارشی مورد
نظرتان را ایجاد کنید.
فصل 11: ویژگیهای پیشرفتهتر C#
در این فصل سعی داریم با معرفی تعدادی تکنیک برنامهنویسی پیشرفته درک شما را از زبان
برنامهنویسی C# عمیقتر کنیم. برای نمونه، یاد میگیرید که چطور عملگرها را
overload کنید تا روی نوعهای مختلف به شکلهای مختلفی عمل کنند و یا برای نوعهای خود
روتینهای تبدیل سفارشی بسازید (هم ضمنی و هم صریح). علاوه بر این، نحوهی ساخت و کار با
ایندکسرها را یاد میگیرید و با متدهای بسطی (extension methods)، نوعهای ناشناس
(anonymous types) و متدهای partial نیز آشنا میشوید.
فصل 12: رویدادها (Events)، نمایندهها (Delegates) و عبارات لامبدا
هدف اصلی این فصل معرفی نوع نماینده (Delegate) است. به بیان ساده، یک
نمایندهی .NET شیئی است که به متدهای دیگری در برنامهی شما اشاره میکند. با
استفاده از این نوع میتوانید سیستمهایی بسازید که به چندین شیء امکان تعامل دوطرفه را
میدهند. بعد از آشنایی با نمایندههای .NET با کلمه کلیدی event آشا میشوید که
میتوانید با استفاده از آن دستکاری در برنامهنویسی نمایندههای خام را سادهتر کنید. و
سرانجام این فصل با معرفی عملگر لامبدا (<=) و توصیف ارتباط بین نماینهها، متدهای
ناشناس و عبارات لامبدا به پایان میرسد.
فصل 13: معرفی تکنولوژی LINQ
در این فصل در مورد تکنولوژی LINQ یا Language Integrated Query صحبت خواهیم کرد. LINQ به ما
امکان میدهد که عبارات کوئریِ strongly-typed ایجاد کنیم که قابلیت اعمال روی منابع
دادهای مختلفی (که میتوانند به عنوان اهداف LINQ در نظر گرفته شوند) را دارند. از عبارت
LINQ to Objects زمانی استفاده میشود که اشیاء درونبرنامهای مانند آرایهها، کالکشنها و
یا نوعهای سفارشی به عنوان هدف LINQ در نظر گرفته میشوند. اطلاعاتی که در این فصل بدست
میآورید، هنگام مواجهه با سایر اهداف LINQ نیز مفید واقع میشوند.
فصل 14: پروسهها و اپدامین (AppDomain)
با توجه به اینکه تا این بخش از کتاب باید درک خوبی از اسمبلیها پیدا کرده باشید، در این
فصل نگاه دقیقتری به ترکیبات یک فایل اجرایی .NET لود شده خواهیم داشت. هدف این
فصل، بیان و تشریح رابطهی بین پروسهها، دامنههای اپلیکیشن و contextual boundaries است.
این مباحث، پایه خوبی برای فصل 15 ایجاد میکنند: جایی که بناست در مورد اپلیکیشنهای
multithreaded صحبت کنیم.
فصل 15: برنامهنویسی موازی و Multithreading
در این فصل در مورد ساخت اپلیکیشنهای multithreaded صحبت میکنیم و روشهایی را برای نوشتن
کد thread-safe ارائه میدهیم. این فصل را با مرور مجدد مفهوم نمایندهها شروع میکنیم تا
از درک پشتیبانی ذاتی نمایندهها از فراخوانی غیرهمزمان متدها مطمئن شویم. سپس نگاهی به
نوعهای فضای نام System.Threading خواهیم داشت. در ادامه، در مورد TPL یا Task Parallel
Library صحبت میکنیم. توسعهدهندگان .NET با استفاده از TPL میتوانند
اپلیکیشنهایی بسازند که بار کاری آنها روی همهی پردازندهها توزیع شود. سپس در مورد
Parallel LINQ نیز مطالبی بیان خواهد شد که روشی برای تولید کوئریهای LINQ مقیاسپذیر روی
چندین هستهی ماشین ارائه میدهد. در ادامهی فصل نیز در مورد فراخوانیهای nonblocking با
استفاده از کلمات کلیدی async و await صحبت میشود و همچنین، در مورد توابع local و
asynchronous streams نیز صحبت میکنیم.
فصل 16: ساخت و پیکربندی کتابخانههای کلاس
از یک منظر سطح بالا، اسمبلی اصطلاحی است برای توصیف یک فایل باینری ایجاد شده توسط
کامپایلر .NET اما داستان حقیقی اسمبلیهای .NET مفصلتر از این است. در
این فصل با نحوهی ساخت و انتشار اسمبلیها آشنا شده و تفاوت بین کتابخانههای کلاس و
اپلیکیشنهای کنسول را درک خواهید کرد.
فصل 17: انعکاس و برنامهنویسی دینامیک
در این فصل بحث خود را در مورد اسمبلیهای .NET ادامه داده و فرایند کشف نوع در
زمان اجرا با استفاده از فضای نام System.Reflection را تشریح میکنیم. با استفاده از
نوعهای این فضای نام، قادر به ساخت اپهایی خواهیم بود که میتوانند به متادیتا دسترسی
داشته باشند. علاوه بر این، خواهید دید که چطور با استفاده از تکنینک مقیدسازی با تاخیر
(late binding) نوعهایی زا در زمان اجرا و به صورت دینامیک ساخته و لود میکنیم. موضوع
دیگر این فصل، نقش صفتهای (attributes) .NET است (هم استاندارد و هم
سفارشی). .NET 4 جنبهی جدیدی از فریمورک .NET با نام Dynamic Language
Runtime یا DLR را معرفی کرد. با استفاده از DLR و کلمه کلیدی dynamic
در C# میتوانید دادههایی تعریف کنید که تا زمان اجرا واقعاً ساخته نشوند.
استفاده از این ویژگیها برخی از کارهای برنامهنویسی پیچیده را به شکل چشمگیری ساده
میکند. در انتهای این فصل، با برخی استفادههای عملی از دادههای دینامیک آشنا میشویم.
فصل 18: زبان CIL و اسمبلیهای دینامیک
در این فصل ما دو هدف عمده را دنبال میکنیم. در اولین بخش، گرامر و مفاهیم زبان CIL را با
جزئیات بیشتری نسبت به فصول قبل بررسی میکنیم. ادامهی این فصل نیز به صحبت در مورد نقش
فضای نام System.Reflection.Emit اختصاص دارد. میتوانید از نوعهای موجود در این فضای نام
برای ساخت اپلیکیشنهایی که قابلیت تولید اسمبلیهای دینامیک را داشته باشند، استفاده کنید.
به بیان فنی، اسمبلیهایی که در زمان اجرا در حافظه تعریف و اجرا میشوند، اسمبلیهای
دینامیک نام دارند.
فصل 19: کار با فایلها و Serialization
این فصل به بررس روشهای خواندن و نوشتن در فایلها و استریمها و Serialization اختصاص دارد.
اکثر اپلیکیشنها به تعامل با سیستم فایل (filesyatem) نیاز دارند و ما نحوهی انجام این کار
را در این فصل یاد خواهیم گرفت. به علاوه، در مورد نحوهی encoding و decoding متن
نیز صحبت خواهیم کرد و در پایان قصل هم به متغیرهای محیطی میپردازیم.
فصل 20: کار با دادهها با EF Core
در این فصل با تکنولوژی Entity Framework Core آشنا میشویم. EF Core ما را قادر میکند
که به شکلی کارامد و امن به دیتابیسهای رابطهای (relational databases) مانند SQL Server و
SQLite متصل شویم. یاد خواهیم گرفت که چطور EF Core را روی پروژههای .NET تنظیم کنیم
و با نحوهی تعریف مدلهای EF Core و کوئرینویسی روی دینابیس هم آشنا خواهیم شد.
فصل 21: توسعه وب با ASP.NET Core
در این فصل یک معرفی مقدماتی از ASP.NET Core ارائه میشود و مفاهیم مربوط به توسعهی وب
را از منظر این فریمورک مورد بررسی قرار میدهیم.
فصل 22: ساخت وبسایت با Razor Pages
در این فصل خواهیم دید که چطور میتوانیم از ASP.NET Core Razor Pages برای ساخت
وبسایتها استفاده کنیم. خواهیم دید که چطور میتوانیم از EF Core به همراه ASP.NET Core استفاده کنیم و
نحوهی مدیریت درخواستهای HTTP را یاد میگیریم.
فصل 23: ساخت و استفاده از وبسرویسها
در این فصل از ASP.NET Core Web API برای ساخت یک وبسرویس استفاده میکنیم.
به علاوه، یاد میگیریم که چطور وبسرویس ایجاد شده را تست کنیم و چطور توسط
یک کلاینت HTTP از آن استفاده کنیم.
فصل 24: ساخت UI با Blazor
در فصل پایانی با Blazor آشنا میشویم و خواهیم دید که چطور میتوانیم از آن
برای ساخت کامپوننتهای UI استفاده کنیم. به علاوه، با تکنولوژی WebAssembly
نیز آشنا خواهیم شد.