مقدمه

شرکت مایکروسافت با معرفی پلتفرم .NET و زبان برنامه‌نویسی C# در سال 2002 پایه و مبنای جدیدی برای توسعه‌ی نرم‌افزارهای مدرن به وجود آورد. چندزبانه بودن پلتفرم .NET امکان تعامل بین زبان‌های مختلف را فراهم کرده است. به عنوان مثال، برنامه‌ای که با استفاده از زبان C# نوشته شده می‌تواند توسط برنامه‌ای دیگر که با VB.NET نوشته شده، مورد ارجاع و توسعه قرار گیرد و برعکس. در ادامه‌ی این فصل در مورد این قابلیت همکاری بیشتر صحبت خواهیم کرد.

ادغام نسخه‌های .NET و .NET Core

در سال 2016 مایکروسافت به طور رسمی .NET Core را معرفی کرد. در این فریمورک جدید نیز امکان همکاری بین زبان‌های مختلف (البته بین تعداد کمتری از زبان‌ها) وجود داشت. اما مزیت مهم .NET Core نسبت به .NET این بود که این فریمورک برای اجرا به سیستم‌عامل Windows محدود نبود. این استقلال از پلتفرم، پای C# را به زندگی گروه‌های بیشتری از برنامه‌نویسان باز کرد. تا قبل از .NET Core استفاده از C# به صورت مستقل از پلتفرم (cross platform) تنها از طریق فریمورک‌های دیگری مانند پروژه‌ی Mono ممکن بود.

با انتشار .NET 5 عبارت Core از نام این فریمورک حذف شد. با این کار، مایکروسافت توسعه‌ی جداگانه‌ی .NET و .NET Core را متوقف کرده و آنها را در قالب یک نسخه‌ی واحد با نام .NET یکپارچه کرده است.

در ماه نوامبر سال 2023 مایکروسافت C# 12 و .NET 8 را ارائه داد. C# 12 نیز همانند نسخه قبلی (C# 11) به یک نسخه‌ی خاص از پلتفرم وابسته است و تنها روی .NET 8 یا نسخه‌های بالاتر اجرا می‌شود. وابسته کردن یا گره زدن یک نسخه از زبان به یک نسخه از فریمورک، به تیم توسعه‌ی C# این آزادی عمل را می‌دهد که بتوانند ویژگی‌هایی را که در غیر این صورت به خاطر محدودیت‌های فریمورک .NET قابل افزودن به C# نبودند، به این زبان اضافه کنند.

ما در این دوره‌ی آموزشی دو هدف عمده را دنبال می‌کنیم. هدف اول، آشنا کردن شما با زبان برنامه نویسی C# و جزئیات گرامری و مفاهیم معناشناختی این زبان است و هدف بعدی ما آموزش استفاده از چند API و کتابخانه کاربردی فریمورک .NET است. مهمترین این کتابخانه‌ها عبارتند از: Entity Framework (EF) Core برای کار با دیتابیس‌ها و سایر منابع داده‌ای و ASP.NET Core برای تولید اپلیکیشن‌های وب و سرویس‌های RESTful. در مجموع، راه درازی پیش روی ماست اما هر سفری هر چقدر هم که طولانی باشد، از یک نقطه‌ای شروع می‌شود. این فصل، نقطه‌ی آغاز سفر ما به دنیای .NET و C# است.

در این فصلِ ابتدایی ما سعی داریم پیش‌نیاز مفهومی لازم برای ادامه‌ی کتاب را فراهم کنیم. در این راستا توصیف سطح بالایی از تعدادی از مباحث مرتبط با فریمورک .NET مانند اسمبلی‌ها، زبان واسط بین کدهای منبع و کدهای ماشین که CIL یا Common Intermediate Language نام دارد و کامپایلر JIT یا just-in-time ارائه خواهیم داد. علاوه بر معرفی تعدادی از کلمات کلیدی زبان C# تلاش می‌کنیم تا شما را با رابطه‌ی بین بخش‌های مختلف فریمورک .NET آشنا کنیم.

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

مزایای کلیدی فریمورک .NET

در اینجا به بعضی از مهمترین مزایا و ویژگی‌های .NET اشاره‌ای مختصر و گذرا داریم:

  • پشتیبانی از چندین زبان برنامه نویسی: برای تولید برنامه‌های .NET محدود به یک زبان برنامه‌نویسی خاص نیستیم و می‌توانیم از هر یک از زبان‌های سازگار با این فریمورک مثل C#، VB.NET یا F# استفاده کنیم.
  • وجود موتور اجرای مشترک برای همه‌ی زبان‌های فریمورک: یک مزیت این موتور اجرای مشترک، وجود یک مجموعه‌ی واحد از نوع‌های داده‌ای (data types) است که توسط همه‌ی زبان‌های .NET پشتیبانی می‌شوند.
  • یکپارچگی زبان‌ها: در فریمورک .NET امکان پیاده‌سازی وراثت، مدیریت استثنا و اشکال‌زدایی به شکل مستقل از زبان وجود دارد. به عنوان مثال، ،شما می‌توانید یک کلاس پایه را در C# تعریف کنید و آن را در ویژوال بیسیک بسط دهید.
  • کتابخانه کلاس‌های پایه: این کتابخانه مجموعه‌ای از هزاران نوعِ (type) از پیش تعریف‌شده است که امکان ساخت کتابخانه‌های کد، اپلیکیشن‌های ترمینال، اپلیکیشن‌های دسکتاپ گرافیکی و وبسایت‌های پیشرفته و سطح سازمانی را فراهم می‌کنند.
  • مدل استقرار ساده‌شده: کتابخانه‌های .NET در رجیستری سیستم ثبت نمی‌شوند و علاوه بر این، فریمورک .NET اجازه می‌دهد که چندین نسخه از یک فایل dll بر روی یک ماشین نصب باشد و اینها به معنای ساده‌تر شدن فرایند نصب و حذف برنامه‌هاست.
  • پشتیبانی گسترده از Command-line: رابط خط فرمان .NET یا Command-Line Interface که به اختصار dotnet CLI نامیده می‌شود، یک مجموعه‌ابزار مستقل از پلتفرم برای توسعه و پکیج کردن برنامه‌های .NET است. علاوه بر ابزارهای استانداردی که به همراه .NET SDK ارائه می‌شوند، امکان نصب ابزارهای اضافی دیگر نیز وجود دارد.

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

مدل پشتیبانی از نسخه‌های .NET

برای برنامه‌نویسان مهم است که بدانند فریمورک و یا به طور کلی تکنولوژی‌های مورد استفاده‌ی آنان تا چه زمانی مورد پشتیبانی سازندگان آنهاست و این پشتیبانی در چه زمانی متوقف می‌شود. مدلی که مایکروسافت برای وضعیت پشتیبانی از نسخه‌های مختلف .NET به کار گرفته همان مدلی است که معمولاً توسط سازندگان فریمورک‌های متن‌باز استفاده می‌شود.

نسخه‌های Long-Term Support یا LTS نسخه‌های اصلی و پایداری هستند که برای یک مدت طولانی مورد پشتیبانی قرار می‌گیرند. این نسخه‌ها پایداری زیادی دارند و در طول حیات خود تنها آپدیت‌های حیاتی و یا آپدیت‌هایی را که با یک تغییر اساسی همراه نیستند، دریافت می‌کنند. یک نسخه‌ی LTS از .NET در بازه‌های زمانی زیر پشتیبانی می‌شود:

  • سه سال بعد از انتشار اولیه
  • یک سال پشتیبانی به صورت نگهداری (maintenance) بعد از انتشار نسخه‌ی LTS بعدی

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

انتقال یک نسخه از .NET به فاز نگهداری به این معناست که پشتیبانی از آن نسخه به مواردی مثل رفع باگ‌های امنیتی محدود می‌شود.

مایکروسافت ترجیح می‌دهد که نسخه‌های Short-Time Support را Standard Term Support یا STS نامگذاری کند. این نسخه‌ها تا 18 ماه بعد از انتشار پشتیبانی می شوند.

همانطور که گفتیم، فریمورک .NET 8 در نوامبر 2023 منتشر شد. این نسخه از فریمورک به عنوان یک نسخه‌ی LTS معرفی شد و بنابراین، تا نوامبر 2026 پشتیبانی خواهد شد. اما فریمورک .NET 7 که در نوامبر 2022 منتشر شد، یک نسخه‌ی STS است و تا ماه می سال 2024 مورد پشتیبانی بود.