خلاصهای از بخشهای کتاب
زبانی برای برنامهنویسی
مدرنِ چندسکویی
پوشش دهنده آخرین نسخه
زبانC# (9.0)
چه موضوعاتی در این کتاب پوشش داده میشوند
آنچه برای یادگیری این کتاب به آن نیاز دارید
ساختن برنامههای کنسولی با استفاده از VSC
دانلود پاسخ سوالات از مخزن GitHub
کنترل روند
برنامه و تبدیل گونهها
نوشتن، رفعاشکال،
و آزمایش توابع
ساخت گونههای
خودتان توسط برنامهنویسی-شیءگرا
پیادهسازی رابطها
(اینترفیسها) و وراثت
تشکیل یک کتابخانه کلاس و برنامه کنسولی
فایلها، جریانها
و سریالسازی
فرهنگِ اصطلاحاتِ حفاظت از دادهها
کار با پایگاههایداده
توسط Entity Framework Core
پرسوجو و تغییر
دادهها با استفاده از LINQ
بهبود سرعت و
مقیاسپذیری برنامهها توسط چندکارگی
نظارت بر روی سرعت برنامه و مصرفِ منابع
معرفی برنامههای
عملی C# و .NET
ساخت وبسایتها
با استفاده از صفحات ASP.NET Core Razor
زبان C# نیاز به تعریف ندارد، زیرا خالق و پشتیبان آن شرکت
مایکروسافت است. جدا از IBM و چند شرکت انگشتشمار
دیگر، مایکروسافت اولین و پرسابقهترین شرکت نرمافزاری جهان است که از اواخر دهه
70 میلادی مشغول تولید نرمافزار برای کامپیوترهای شخصی بوده است. این شرکت برای
خیلی از زبانهای برنامهنویسی مفسرها و یا کامپایلرهایی را تولید کرده، از جمله
برای زبانهای BASIC، C، C++، و همینطور Java. ولی زبان C#
جزء اولین زبانهایی بود که خود این شرکت در سال 2001 اقدام به طراحی و توسعه آن
کرد. از لحاظ نحوی، زبان C# جزء زبانهای خانواده
C بشمار میرود، زیرا بسیاری از
ساختارهای آن شبیه زبان C یا C++ است. ولی تفاوتهای اساسی با آنها دارد، که مهمترین آن این
است که آنها زبانهایی هستند که کُد منبع آنها باید مستقیماً به زبان ماشین ترجمه
شود، ولی کُدهای منبع زبان C# باید ابتدا به یک
زبان میانجی، و در مرحله بعد، برای اجراء به زبان ماشین ترجمه شوند. این زبان
شباهت بسیاری به زبان Java دارد، و هدف اولیه آن
هم رقابت با این زبان بود.
زبان C# ابتدا به چهارچوب .NET وابسته بود، و بدلیل اینکه .NET چهارچوبی بود که
ابتدا برای سیستم عامل ویندوز طراحی شده بود، بکارگیری C#
هم عمدتاً به ویندوز وابسته بود. ولی کمکم با ظهور نرمافزارهایی مانند مونو (Mono)
و پیادهسازی .NET
روی سیستمعاملهای دیگر، کاربرد C# نیز گسترش یافت و
تقریباً در اکثر سیستمعاملهای کامپیوترهای شخصی و موبایل میتوان از آن استفاده
کرد.
کاربرد
این زبان بینظیر است و تقریباً در هر حوزهای میتوان از آن استفاده کرد؛ پیاده
سازی برنامههای مبتنی بر بانکهای داده، تولید برنامهها و سرویسهای وب، پردازش
تصاویر، بازیها، برنامههای علمی، و ... .
داشتن
مستندات خوب و پشتیبانی کمپانی بزرگی مثل مایکروسافت (و به تازگی، پشتیبانی از سوی
جوامع منبع باز)، از ویژگیهای خوب این زبان است.
اگر از
ویندوز استفاده میکنید، C# یکی از گزینههای
اصلی برنامهنویسی روی این سیستم عامل است.
این کتاب
زبان C# را از سطوح ابتدایی آموزش میدهد،
و یادگیری آن هیچ پیشنیازی جزء اصول مقدماتی کامپیوتر ندارد.
در مقایسه
با خیلی از کتابهای پرحجم مشابه، این کتاب برای یادگیری اصول C# طراحی شده، و از دنبال کردن پروژههای طولانی و
گیج کننده پرهیز میکند، و مثالهای آن کوتاه و مفید هستند. با یک برنامه منظم
روزانه، براحتی میتوان این کتاب را در عرض 3 هفته تمام کرد.
در طول 20
سال گذشته کتابهای زیادی برای یادگیری زبان C#
منتشر شدهاند، من سعی کردم کتابی را انتخاب کنم که آخرین نسخه این زبان، که فعلاً
نسخه 9
است، را پوشش دهد.
این کتاب جزء کتابهایی بود که در اوایل
دوران همهگیری کرونا ترجمه آن را شروع کردم ولی متاسفانه نتوانستم آن را تمام
کنم. بالاخره فرصتی دست داد تا آن را تمام کنم.
مارک جی.
پرایس (Mark J. Price)، متخصص نرمافزار است که در شرکت مایکروسافت
کار می کند. زبان اصلی برنامهنویسی او C#
است، و بیش از 25 سال سابقه برنامهنویسی و تدریس دارد. مارک دارای مدرک کارشناسی
ارشد در رشته علوم کامپیوتری از دانشگاه بریستول است.
پاییز 1400
کامران بزرگزاد
خیلی از
کتابهای آموزش برنامهنویسی در بازار موجود هستند که حجم آنها به هزاران صفحه
بالغ میشود و عنوان آنها هم این است که مرجع کامل زبان C#
و چهارچوب .NET
هستند.
این کتاب با
آنها متفاوت است، زیرا با حجم 750 صفحهای که دارد، کتاب مختصری محسوب میشود. ولی
همراه با ارائه نمونههای عملی که در مورد موضوعات مختلف مطرح میکند، میخواهد
کتابی با روح باشد که خواندن آن مفرح است.
این کتاب
یک راهنمای قدم به قدم برای آموزش C# نیز هست، که با مطرح
کردن مثالهای عملی درباره کاربرد .NET چند-سکویی، برنامههایی را معرفی میکند که میتوانند
توسط آن ساخته شوند. این کتاب برای مبتدیانی که میخواهند C#
و .NET
را یاد بگیرند، و همچنین برنامهنویسانی که در گذشته با این زبان کار کردهاند ولی
در چند سال اخیر از تغییراتی که در این زبان حاصل شده غافل بودهاند، بسیار مناسب
است.
اگر شما
از قبل با نسخههای قدیمیتر زبان C# کار کردهاید، در
اینصورت میتوانید به فصل دوم کتاب بروید و نگاهی به عناوین آن بیاندازید
تا با ویژگیهای جدید این زبان آشنا شوید و مستقیماً آنها را بخوانید. همپنین اگر
با نسخههای قدیمی .NET
کار کردهاید میتوانید به فصل 7 رجوع کرده و ویژگیهای جدید این چهارچوب را مطالعه
کنید.
به منظور
اینکه بتوانید سریعاً دست بکار شده و همکاران و دوستانتان را تحت تاثیر قرار دهید،
من خیلی فوری به نکات اصلی C# و .NET اشاره میکنم. در این
کتاب، بجای اینکه بسیاری از خوانندهگان را با خواندن جزئیاتِ کامل خسته کنم، من
از توضیح آنها صرف نظر کرده، و فرض را بر این میگذارم که شما آنقدر مهارت دارید
که برای گرفتن اطلاعات دقیقتر درباره موضوعاتِ مرتبط با آنها، به سایتهایی نظیر Google رجوع کنید. اینها شامل مطالبی هستند که در یک کتاب
مقدماتی یا متوسط نیازی به توضیح آنها نیست.
برای پاسخ
به پرسشهای پایان فصل و همچنین راهنمایی قدم به قدم حل مسائل مطرح شده، شما میتوانید
به سایت گیتهاب (https://github.com/markjprice/cs9dotnet5)
بروید و نسخهای از آن را بر روی کامپیوتر خودتان کپی (clone)
کنید.
فصل 1، تحت عنوان ”به C#
و .NET خوش آمدید!“، درباره برپاسازی محیط توسعه شما و
استفاده از Visual Studio Code برای نوشتن سادهترین
برنامه ممکن با C# و .NET است. شما یاد خواهید
گرفت که چگونه در سیستم عاملهای پشتیبانی شده، برنامههایی را بنویسید و آنها را
کامپایل کنید. این شامل ویندوز، مکاواس، و لینوکس میشود. برای سادهتر نوشتن
برنامههای کنسولی، شما بکارگیری ویژگی جدیدی بنام برنامه سطح-بالا را یاد میگیرید
که در C# 9.0 معرفی شده. شما همچنین یاد خواهید
گرفت که در اینترنت چه جاهایی را برای کمک گرفتن جستجو کنید.
فصل 2، تحت عنوان ”صحبت به زبان C#“ به معرفی نسخههای مختلف C# و ویژگیهای جدیدی که به هر یک از آنها اضافه شده میپردازد،
و سپس به معرفی دستور زبان و واژگان C# میپردازد که لازمه
نوشتن تمام برنامهها به این زبان هستند. در عمل شما یاد خواهید گرفت که چگونه
متغیرها از گونههای مختلف را اعلان کنید، و از تغییر مهمی که در C# 8 در رابطه با ”گونههای ارجاعی نولپذیر“ حاصل شده نیز
آگاه خواهید شد.
فصل 3، تحت عنوان ”کنترل روند برنامه و تبدیل گونهها“
استفاده از عملگرها برای انجام
عملهای ساده بر روی متغیرها را توضیح میدهد، از جمله مقایسه آنها، و نوشتن
کُدهایی برای تصمیمگیری، انطباق الگو در C# 7
تا C# 9، تکرار بلوکی از عبارات، و
تبدیل گونهها به یکدیگر.
فصل 4، تحت عنوان ” نوشتن، رفعاشکال، و آزمایش توابع“
درباره اصل (DRY)، یا ”کارهای تکراری نکنید“ است. اینکار با استفاده از
توابعی صورت میگیرد که میتوانند یا به سبک تابعی، یا دستوری نوشته شده، و مجدداً
در همان برنامه، یا برنامههای دیگر، مورد استفاده قرار گیرند. شما همچنین چگونگی
استفاده از ابزارهای اشکالزدایی را یاد خواهید گرفت، تا از آنها برای رفع اشکار و
ردیابی رفتار برنامه استفاده کنید.
1.
فصل 5، تحت عنوان ”ساخت
گونههای خودتان توسط برنامهنویسی-شیءگرا“ اعضای مختلفی که یک گونه میتواند داشته باشد را شرح
میدهد، از جمله فیلدها برای ذخیره دادهها، و متدها برای انجام کارها. شما از
مفاهیم برنامهنویسی شیءگرا، مانند تجمیع و لفافهبندی استفاده خواهید کرد. با
چندتاییها و متغیرهای out آشنا خواهید شد.
همچنین با کلیدواژههای جدیدی مثل with و record که در C# 9 به این زبان اضافه
شدند آشنا میشوید.
فصل 6، تحت عنوان ” پیادهسازی رابطها (اینترفیسها) و وراثت“
به شرح چگونگی انشعاب گونههای
جدید از گونههای موجود با استفاده از برنامهنویس شیءگرا میپردازد. شما چگونگی
تعریف عملگرها و توابع محلی، نمایندهها، و رویدادها، چگونگی پیادهسازی اینترفیسها
و چگونگی باطل کردن یکی از اعضای گونه و بازنویسی مجدد آن، چندریختی، ایجاد متدهای
گسترش، و چگونگی قالب بندی میان کلاسهای موجود در یک سلسله مراتب وراثت را یاد
خواهید گرفت.
فصل 7، تحت عنوان ” بستهها و گونههای .NET“ به معرفی نسخههای مختلف .NET و جدول ویژگیهای
جدید آنها میپردازد، و سپس گونههای .NET که از استاندارد .NET پیروی میکنند،
و اینکه آنها با C# چطور رابطه داند را
معرفی میکند. شما همچنین چگونگی بستهبندی و استقرار برنامهها و کتابخانههای
خودتان را یاد خواهید گرفت.
فصل 8، تحت عنوان ” گونههای متداول در .NET“ گونههایی را شرح میدهد که برای انجام
کارهای متداول میتوانید در برنامه خودتان از آنها استفاده کنید. این کارها شامل
تغییر اعداد و متنها، ذخیرههازی دادهها در گردایهها، و پیادهسازی بینالمللیسازی
(internationalization) هستند.
فصل 9، تحت عنوان ” فایلها، جریانها و سریالسازی“ درباره تعامل برنامه با سیستمفایلی، خواندن
و نوشتن فایلها و جریانها، کدگذاری متنها، فرمتهای سریالسازی، از قبیل JSON و XML است.
فصل 10، تحت عنوان ” محافظت از دادهها و برنامهها“
درباره رمزگذاری دادهها است
تا از دادهها شما در مقابل کاربرانِ بدخواه حفاظت کند. همچنین با درهمسازی و
امضا آشنا خواهید شد که میتوانند صحت دادهها را تضمین کنند. همچنین با
اعتبارسنجی و مجوزسنجی نیز آشنا خواهید شد.
فصل 11، تحت عنوان ” کار با پایگاههایداده توسط Entity Framework Core“ خواندن و نوشت پایگاههای داده، مانند Microsoft SQL Server و SQLite
را با استفاده از تکنولوژی ORM توضیح میدهد.
فصل 12، تحت عنوان ” پرسوجو و تغییر دادهها با استفاده از LINQ“ شما را با زبان پرس وجوی یکپارچه، یا LINQ، آشنا میکند.
فصل 13، تحت عنوان ” بهبود سرعت و مقیاسپذیری برنامهها توسط
چندکارگی“ به
شرح اجرای همزمان چند کار برای بهبود عملکرد برنامهها، مقیاسپذیری، و بهرهوری
کاربر میپردازد. برای دیدبانیِ سرعت و عملکرد برنامهها، شما چگونگی کار با async و استفاده از فضای اسمی System.Diagnostics
را یاد خواهید گرفت.
فصل 14، تحت عنوان ” معرفی برنامههای عملی C# و .NET“انواع برنامههای چند-سکویی که میتوانند با
استفاده از C# و .NET ساخته شوند را معرفی میکند.
شما همچنین با پایگاه داده Northwind
آشنا میشوید که در فصل 15 از آن استفاده میگردد.
فصل 15، تحت عنوان ” ساخت وبسایتها با استفاده از صفحات ASP.NET Core Razor“
درباره اصول ساخت وبسایتها
با استفاده از معماری نوین ASP.NET Core است. شما همچنین با صفحات Razor آشنا میشوید که کارِ
ایجاد صفحاتِ وبِ پویا برای وبسایتهای کوچک و متوسط را آسان میکند. همچنین خطلوله
درخواست و پاسخ HTTP را یاد خواهید گرفت.
در بسیاری
از سیستمعاملها، از جمله ویندوز، مکاواس، و لینوکسهای مختلف، شما میتوانید
با استفاده از Visual Studio Code برنامههای C# را توسعه داده و آنها را مستقر کنید. تنها چیزی که نیاز
دارید اتصال به اینترنت، و سیستمعاملی است که از Visual Studio
Code پشتیبانی کند.
هر دستوری
که باید در خط فرمان تایپ شود، و همینطور خروجیهای آن، در یک جعبه تیره مانند زیر
نمایش داده میشوند:
اطلاعات بیشتر: شامل لینکهایی به منابع خارجی هستند که برای خواندن مطالب بیشتر بکار میروند. |
|
روشهای خوب: شامل توصیههایی برای حرفهای نوشتن برنامهها هستند. |
|
در فصل نخست
کتاب، هدف این است که محیط برنامهنویسی شما را برپا کنیم، بفهمیم چه شباهتها و
تفاوتهایی میان .NET
و .NET Core،
.NET Framework،
و .NET Standard وجود دارد، و
در آخرِ فصل نیز با استفاده از Visual Studio Code (VSC)، یک برنامه بسیار ساده به
زبان C# 9 و .NET 5 بنویسیم.
بعد از
این فصل، کتاب را میتوان به سه بخش تقسیم کرد: بخش اول، اصول ابتدایی و واژگان
زبان C# ؛ بخش دوم، گونههای موجود در
.NET
برای ساخت خصوصیتهای مختلف برنامه؛ و بخش سوم، مثالهایی از برنامههای چند-سکویی (cross-platform) که شما با استفاده C#
و .NET
میتوانید بسازید.
برای
یادگیری موضوعات پیچیده، بیشتر مردم بجای اینکه جزئیات آن را بخوانند ترجیح میدهند
از روش تقلید و تکرار استفاده کنند؛ بنابراین من هم در این کتاب قصد ندارم با شرحِ
جزئیاتِ همه مراحل شما را گیج کنم. هدف این است که شما بتوانید کدهایی را بنویسید،
و از روی آن کدها یک برنامه بسازید، و ببینید که آیا درست اجراء میشود.
لازم نیست
فوراً همه اصول زیربنایی را بدانید. بعداً همانطور که شما برنامههای بیشتری را میسازید
با جزئیات نیز آشنا خواهید شد.
فصل اول
موضوعات زیر را پوشش خواهد داد:
·
برپا کردن محیط برنامه نویسی
·
فهم .NET
·
ساخت برنامههای کنسولی با
استفاده از Visual Studio Code
·
دانلود حل مسائل کتاب از منبع GitHub
·
جستجو در اینترنت برای کمک
پیش از اینکه شما برنامهنویسی را شروع کنید به یک
ویرایشگر C# نیاز دارید.
مایکروسافت خانوادهای از ویرایشگرها و محیطهای
برنامهنویسی یکپارچه یا IDEها را فراهم آورده، که شامل موارد زیر
هستند:
• Visual Studio Code
• GitHub Codespaces
• Visual Studio 2019
• Visual Studio 2019 for Mac
جدیدترین
و سبُکترین ویرایشگری که میتوانید انتخاب کنید، و تنها ویرایشگر چند-سکویی که از
سوی مایکروسافت ارائه شده Visual Studio Code (یا VSC) است. این ویرایشگر میتواند
بر روی کلیه سیستمعاملهای متداول، از جمله ویندوز، مکاواس، و بسیاری از نسخههای
لینوکس، مثل Red Hat و Ubuntu اجراء شود.
Visual Studio Code
انتخاب خوبی برای برنامهنویسیهای مُدرن چند-سکویی است، زیرا به غیر از C#
از زبانهای دیگری را نیز پشتیبانی کرده، و چند-سکویی و سبُک است و میتواند بر
روی تمام سیستمعاملهای متداول اجراء شود.
در یک
بررسی که از سوی سایت Stack Overflow در 2019 انجام گرفت، همانطور
که در شکل زیر دیده میشود، بیش از نیمی از برنامهنویسان Visual
Studio Code را بعنوان محیط برنامهنویسی خود انتخاب کرده بودند:
شکل 1.1: محبوبترین محیطهای برنامهنویسی
اطلاعات بیشتر: شما میتوانید گزارش این بررسی را از طریق این آدرس مطالعه کنید: |
|
استفاده
از Visual Studio Code به این معنی است که
برنامه نویس برای توسعه برنامههای چند-سکویی میتواند از یک ویرایشگر چند-سکویی
استفاده کند. بنابراین، من برای کلیه فصول این کتاب، از این ویرایشگر استفاده کردهام.
اطلاعات بیشتر: شما میتوانید با مراجعه به این آدرس اطلاعات بیشتری را در مورد طرحهای مایکروسافت برای VSC کسب کنید: |
|
البته شما میتوانید بجای VSC از Visual Studio 2019 و یا Visual Studio for Mac نیز استفاده کنید، که در اینصورت
من فرض را بر این میگذارم که شما میدانید چگونه از آنها استفاده کنید. این کتاب
چگونگی استفاده از ویرایشگرها را آموزش نمیدهد، و فقط بر روی برنامه نویسی تمرکز
دارد.
اطلاعات بیشتر: برای مقایسه Visual Studio Code و Visual Studio 2019 شما میتوانید به این آدرس رجوع کنید: |
|
GitHub Codespaces یک محیط توسعه کاملاً تنظیم
شده بر پایه Visual Studio Code است که میتواند در
محیطی که در کلاد (cloud) میزبانی میشود از طریق یک
مرورگر وب مورد دسترسی قرار گیرد. این از مخازن Git، افزونهها (extensions)،
و یک رابط-خط-فرمانی توکار پشتیبانی میکند تا شما بتوانید از هر دستگاهی برنامههای
خودتان را ویرایش، اجرا، و آزمایش کنید.
اطلاعات بیشتر: برای کسب اطلاعات بیشتر در مورد GitHub Codespaces به این آدرس زیر رجوع کنید: |
|
Visual Studio 2019
تنها بر روی ویندوزهای نسخه 7 به بالا کار میکند. اگر میخواهید برنامههای UWP[1]
را توسعه دهید باید، VS را بر روی ویندوز 10 نصب کنید.
انتخاب
ویرایشگر و سیستمعاملی که برنامههای خودتان را در آنجا توسعه میدهید، باعث نمیشود
استقرار (deployment) برنامههایی که مینویسید به
همان سکو محدود باشند.
.NET 5از سکوهای زیر برای
استقرار برنامهها پشتیبانی میکند:
·
سیستم
عامل ویندوز: ویندوزهای
نسخه 7 به بالا. ویندوزهای سرور 2012 R2 SP1 به بالا. سرور Nano نسخه 1809 به بالا.
·
سیستم
عامل مک: macOS High Sierra نسخه 10.13 به بالا.
·
لینوکس: Alpine Linux 3.11,
به بالا CentOS 7, به بالا، Debian 9 به بالا، Fedora 30
به بالا . Linux
Mint 18, به بالا . openSUSE 15, به بالا . Red Hat Enterprise Linux
(RHEL) 7, به بالا . SUSE Enterprise Linux 12 SP2, به بالا Ubuntu 18.04, 19.10, 20.04, به بالا.
اطلاعات بیشتر: برای اطلاع از فهرست سیستمعاملهای پشتیبانی شده به این آدرس رجوع کنید: |
|
پشتیبانی از Windows ARM64 در .NET 5به این معنی است که شما میتوانید برنامهها
را بر روی دستگاههای Windows ARM، نظیر Microsoft Surface Pro X توسعه داده و سپس مستقر کنید.
اطلاعات بیشتر: برای اطلاع از پشتیبانی از Windows ARM64 به این آدرس رجوع کنید: |
|
تقریباً هر ماه مایکروسافت نسخهای از Visual Studio Code را بیرون میدهد.
اطلاعات بیشتر: برای اطلاع از آخرین نسخه Visual Studio Code به این آدرس رجوع کنید: |
|
نسخهای که ما در این کتاب از آن استفاده میکنیم 1.49 است که در سپتامبر 2020
بیرون آمده، ولی نسبت به شماره نسخه افزونه C# for Visual
Studio Code که بعداً نصب میکنید، شماره نسخه VSC از اهمیت کمتری برخوردار است.
هرچند نصب
افزونه C# بر روی VSC
الزامی نیست، ولی با نصب آن امکان تایپ هوشمند (IntelliSense)،
حرکت در برنامه، و خصوصیات اشکالزدایی برای شما فراهم میآید، بنابراین بهتر است
آن را نصب کنید. برای بکارگیری C# 9، افزونه نسخه 1.23 به بالا را نصب کنید.
در این کتاب من از کلیدهای میانبر و تصاویر گرفته
شده از VSC در macOS
استفاده میکنم. طریقه استفاده در ویندوز و لینوکس نیز تا حد زیادی به همین شکل
است، هر چند ممکن است کلیدهای میانبر فرق کنند. برخی از کلیدهای میانبر پرکاربرد VSC در جدول زیر نشان داده شده است:
کار انجام شده |
macOS |
Windows |
نشان دادن Command Palette |
Cmd + Shift + P |
Ctrl + Shift + P |
نشان دادن Command Palette |
F1 |
F1 |
رفتن به تعریف |
F12 |
F12 |
رفتن به عقب |
Ctrl + - |
Alt + ← |
رفتن به جلو |
Ctrl + Shift + - |
Alt + → |
نشان دادن ترمینال |
Ctrl + ` (backtick) |
Ctrl + ' (quote) |
ترمینال جدید |
Ctrl + Shift + ` (backtick) |
Ctrl + Shift + ' (quote) |
خاموش و روشن کردن توضیحات خطی |
Ctrl + / |
Ctrl + / |
خاموش و روشن کردن توضیحات بلوکی |
Shift + Option + A |
Shift + Alt + A |
جهت مشاهده کامل کلیدهای میانبر، توصیه میکنم فایلهای
PDF زیر را دانلود کنید:
·
برای ویندوز:
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows
·
برای مکاواس:
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf
·
برای لینوکس:
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf
اطلاعات بیشتر: برای اطلاع از کلیدهای میانبر پیشفرض در VSC و چگونگی تغییر آنها به این آدرس رجوع کنید: |
|
در چند سال اخیر Visual Studio
Code طرفداران زیادی پیدا کرده و مایکروسافت از محبوبیت آن شگفتزده
شده. اگر شما آنقدر جرات دارید که بخواهید از نسخههای ناپایدار VSC استفاده کنید، نسخههای درونسازمانی آن که هر روزه
ساخته میشوند نیز قابل دانلود هستند.
حال شما برای
دانلود و نصب VSC، افزونه C#، و .NET 5 SDKآماده هستید:
1.
از آدرس https://code.visualstudio.com
نسخه پایدار VSC را دانلود کرده و سپس نصب
کنید.
2.
از آدرس https://www.microsoft.com/net/download.NET 5 SDK را دانلود کرده و سپس نصب کنید.
3.
برای نصب افزونه C#شما ابتدا باید برنامه VSC
را اجراء کنید.
4.
در VSC
بر روی آیکون Extensions کلیک کنید و یا به
View | Extensions بروید.
5.
C#یکی از محبوبترین افزونههای VSC است و شما باید آن را در بالای فهرست ببینید، در غیر
اینصورت، همانطور که در شکل زیر نشان داده شده C# را در جعبه جستجو تایپ کنید:
·
بر روی Install کلیک کرده و صبر کنید تا پکیجهای مربوطه دانلود و نصب
شوند.
اطلاعات بیشتر: برای اطلاع از پشتیبانی C#در VSC به این آدرس رجوع کنید: |
|
.NET 5، .NET Framework،.NET Core،
و Xamarin همه سکوهای مرتبطی هستند که
برنامه نویسان برای ساخت برنامهها و سرویسها از آنها استفاده میکنند. در این بخش من قصد دارم هر یک از آنها را
به شما معرفی کنم.
چهارچوب .NET
یک سکوی توسعه برنامه است که شامل یک حیناجراء زبان
مشترک (CLR[2])
میباشد که اجراء برنامهها را برعهده دارد. CLR همچنین یک کتابخانه کلاس
اصلی (BCL[3])
دارد که یک کتابخانه غنی از کلاسها را فراهم میآورد تا برنامهها از آنها
استفاده کنند. در ابتد
مایکروسافت چهارچوب .NETرا طوری طراحی کرده بود که امکان چند-سکویی
داشته باشد، ولی تلاش آنها بیشتر بر این متمرکز بود که بهترین کارآیی را در سیستمعامل
ویندوز داشته باشد.
از .NET Framework 4.5.2به بعد، این چهارچوب به یکی از اجزاء رسمی
سیستمعامل ویندوز بدل شد. چهارچوب .NETبر
روی بیش از یک میلیارد کامپیوتر نصب شده، بنابراین تا آنجا که امکان دارد تغییرات
آن باید کم باشد. حتی تصحیح اشتباهات نیز میتواند مشکلزا باشد، بنابراین
بروزرسانیهای آن بندرت انجام میگیرد.
کلیه برنامههایی که در یک کامپیوتر برای چهارچوب .NETنوشته شدهاند در نسخه یکسانی از CLR و کتابخانهها مشترک هستند که در (GAC[4])
ذخیره شدهاند، و درصورتی که برخی از آنها برای سازگاری به نسخه خاصی نیاز داشته
باشند، این میتواند به مشکلاتی منجر شود.
روشهای خوب:: اگر بخواهیم دقیقتر صحبت کنیم، باید گفت که.NET Framework
سکوی موروثی (legacy)
است که فقط بر روی ویندوز کار میکند. برای ایجاد برنامههای جدید از این
چهارچوب استفاده نکنید.
|
|
غیر از مایکروسافت، شرکتهای دیگری نیز شروع به
پیادهسازی.NET
Framework کردند و اسم آن را پروژه Mono
گذاشتند. Mono چند-سکویی است، ولی
همیشه از پیادهسازیهای رسمی .NET Framework عقب بوده.
اطلاعات بیشتر: برای اطلاع از جزئیات پروژه Mono به این آدرس رجوع کنید: |
|
بدلیل اینکه Mono به پایهای برای
سکویِ موبایلِ زَمرین Xamarin و همچنین سکوهای
توسعه بازی، مثل Unity،
بدل شد، محبوبیت آن افزایش یافت.
اطلاعات بیشتر: برای اطلاعات بیشتر در مورد Unity
به لینک زیر رجوع کنید: |
|
مایکروسافت در سال 2016 Xamarin
را خرید و حالا افزونه Xamarin که قبلاً بسیار گران
بود، بطور مجانی بر روی Visual Studio 2019 قرار گرفته. در سیستم عامل مک، مایکروسافت نام Xamarin Studio را به Visual Studio for Mac تغییر داد، که حالا علاوه بر ایجاد برنامههای
موبایل، میتوان از آن برای ایجاد برنامههای کنسولی و سرویسهای وب نیز استفاده
کرد.
امروزه ما
در یک دنیای چند-سکویی زندگی میکنیم که حقیقتاً برنامه نویسی موبایل و کلاد از
اهمیت ویندوز بعنوان یک سیستمعامل کاستهاند. به همین دلیل تلاش مایکروسافت بر
این بوده که تا نسخههای جدید .NETرا
از وابستگیهایی که به ویندوز دارند رها کند. همانطور که آنها مشغول بازنویسی
چهارچوب .NETبودند تا آن را به یک سیستم چند-سکوی واقعی
بدل کنند، آنها فرصت این را پیدا کردند تا بخشهای عمدهای از آن که جزء هسته
محسوب نمیشدند را بردارند.
این محصول
جدید .NET Core(هسته دات نت) نامگذاری
شد و شامل پیادهسازی یک هسته چند-سکویی از CLR به نام CoreCLR است، به همراه یک
کتابخانه ساده سازی شده بنام CoreFX
عرضه میشود.
اسکات
هانتر مدیر برنامه .NETدر مایکروسافت گفت ”چهل درصد از مشتریان .NET Core
برنامهنویسانی هستند که جدیداً از این سکو استفاده میکنند، و این همان چیزی است
که ما از .NET
Coreانتظار داشتیم، یعنی
پیوستن آدمهای جدید به این سکو.“
.NET Coreبسرعت در حال تحول است و بدلیل اینکه میتواند در
کنار یک برنامه مستقر شود، میتواند مکرراً تغییر کند، تغییراتی که بر روی برنامههای .NET Core
دیگری که بر روی همان ماشین قرار دارند تاثیر ندارد. بهسازی هایی که مایکروسافت
بر روی .NET
Coreانجام میدهد نمیتوانند
به .NET
Framework اضافه شوند.
اطلاعات بیشتر: برای اطلاعات از موقعیت .NET Core و .NET Framework
به لینک زیر رجوع کنید: https://devblogs.microsoft.com/dotnet/update-on-net-core-3-0-and-net-framework-4-8/ |
|
در
کنفرانس Microsoft Build developer که در ماه می 2020
برگزار شد، تیم
.NET اعلام کرد طرح آنها برای یکپارچه سازی .NETبه تاخیر افتاده. آنها گفتند .NET 5 که در 10 نوامبر 2020
بیرون داده میشود، کلیه سکوهای مختلف.NET ، بجزء سکوی موبایل، را یکپارچه میکند. یکپارچه سازی
کلی، که شامل موبایل هم میشود، تا وقتی .NET 6 در نوامبر 2021 بیرون بیاید،
اتفاق نمیافتاد.
نام .NET Core به .NETتغییر پیدا کرد، و شماره نسخه اصلی آن هم که باید 4 باشد از قلم افتاد تا با .NET Framework 4.x
اشتباه نشود. مایکروسافت نسخههای سالیانه اصلی خودش را در ماه نوامبر بیرون میدهد،
مانند اپل که اینکار را بطور سالیانه در ماه سپتامبر انجام میدهد.
اطلاعات بیشتر: برای اطلاع از طرحهای مایکروسافت برای یک .NETواحد، به این آدرس رجوع کنید. |
|
جدول زیر زمان بیرون دهی نسخههای اصلی .NET جدید را نشان میدهد:
نسخه |
تاریخ بیروندهی |
ویرایش |
تاریخانتشار |
.NET Core RC1 |
November 2015 |
اول |
March 2016 |
.NET Core 1.0 |
June 2016 |
|
|
.NET Core 1.1 |
November 2016 |
|
|
.NET Core 1.0.4 and .NET Core 1.1.1 |
March 2017 |
دوم |
March 2017 |
.NET Core 2.0 |
August 2017 |
|
|
.NET Core for UWP in Windows 10 Fall Creators Update |
October 2017 |
سوم |
November 2017 |
.NET Core 2.1 (LTS) |
May 2018 |
|
|
.NET Core 2.2 (Current) |
December 2018 |
|
|
.NET Core 3.0 (Current) |
September 2019 |
چهارم |
October 2019 |
.NET Core 3.1 (LTS) |
December 2019 |
|
|
.NET 5.0 (Current) |
November 2020 |
پنجم |
November 2020 |
.NET 6.0 (LTS) |
November 2021 |
ششم |
November 2021 |
همانطور
که در زیر توضیح داده شده، نسخههای .NETیا پشتیبانی دراز مدت (LTS[5])
دارند، یا پشتیبانی جاری (Current).
·
LTS: این نسخهها پایدار هستند و
در طول عمرشان به آپدیتهای کمتری نیاز دارند. این نسخهها برای برنامههایی
مناسبند که شما قصد ندارید آنها را بطور مکرر آپدیت کنید. از نسخههای LTS تا سه سال بعد از بیرون دهی پشتیبانی میشود.
·
Current: این نسخهها شامل ویژگیهایی
هستند که ممکن است بر حسب بازخوردهایی (feedback) که از کاربران گرفته
میشود تغییر کنند. اینها برای برنامههایی مناسب هستند که شما بطور فعال درگیر
توسعه آنها هستید و نیاز به استفاده از آخرین بهبودها بوجود آمده در .NET
هستند. پس از یک دوره سه ماهه، از نسخههای فرعی گذشته پشتیبانی نمیشود.
برای درک بهتر انتخاب نسخههای Current و LTS میتوانید به نمودار
زیر نگاه کنید:
شکل 1.3: پشتیبانی از نسخههای مختلف .NET
برای
مثال، اگر شما پروژهای را با .NET 5.0بسازید و مایکروسافت در فوریه 2021 نسخه .NET 5.1 را بیرون دهد، آنگاه
نیاز دارید پروژه خودتان را تا آخر ماه می 2021 به .NET 5.1آپدیت کنید.
اگر به
پشتیبانی دراز مدتتری نیاز دارید، حالا از .NET 5.0استفاده نکنید، بلکه .NET Core 3.1 را انتخاب کنید. در
نوامبر 2021، وقتی .NET
6.0 بیرون آمد، شما هنوز بیشتر از یک سال وقت دارید تا
تا پروژه خودتان را به .NET
6.0آپگرید کنید.
کلیه نسخههای
.NET Core
به آخر عمرشان رسیدهاند، مگر نسخههای LTS
که پایان عمر آنها طبق لیست زیر به پایان میرسد:
·
پایان عمر .NET Core 2.1
تا 21 آگوست 2021 است.
·
پایان عمر .NET Core 3.1
تا 3 دسامبر 2022 است.
·
اگر همانطور که قرار است .NET Core 6.0در نوامبر 2021 بیرون بیاید، پایان عمر آن
نوامبر 2024 است.
اطلاعات بیشتر: برای اطلاع از سیاستهای بیرون دهی .NET به این آدرس رجوع کنید. |
|
شماره
نسخههای حیناجرای .NET(.NET Runtime)
از قراردادهای متداول نسخهبندی نرمافزار پیروی میکنند، یعنی افزایش شماره اصلی
به معنای تغییرات عمده، افزایش شماره فرعی به معنای اضافه شدن ویژگیهای جدید، و
افزایش شماره وصله (patch) نشاندهنده رفع اشکال میباشد.
شماره نسخههای .NET SDKاز قراردادهای متداول نسخهبندی پیروی نمیکند.
شمارههای اصلی و فرعی SDK به شمارههای نسخه
حیناجرا بستگی دارند. ولی شماره وصله از قراردادهای متداول پیروی میکند و نشان
دهنده رفع اشکال است. در جدول زیر مثالهایی از نسخههای SDK را میبینید:
تغییر |
حیناجراء |
SDK |
Initial release |
5.0.0 |
5.0.100 |
SDK bug fix |
5.0.0 |
5.0.101 |
Runtime and SDK bug fix |
5.0.1 |
5.0.102 |
SDK new feature |
5.0.1 |
5.0.200 |
اطلاعات بیشتر: برای اطلاع از چگونگی نسخهبندیهای .NET Coreبه این آدرس رجوع کنید. |
|
آپدیتهای حیناجرای .NETبا نسخههای اصلی مثل 5.x سازگار هستند و نسخههای آپدیت شده .NET SDK قابلیت این را دارند تا برنامههایی را بسازند که نسخههای قبلی حیناجرا را هدف گرفتهاند، بنابراین میتوان نسخههای قبلی آنها را برداشت. شما با وارد کردن دستورات زیر میتوانید ببینید که چه نسخههایی از حیناجرا و SDK بر روی کامپیوتر شما نصب شده است:
•
dotnet --list-sdks
•
dotnet --list-runtimes
برای برداشتن .NET SDK در ویندوز از قسمت App & features استفاده کنید.
هم در ویندوز و هم در مکاواس، میتوانید از ابزار dotnet-core-uninstall استفاده کنید.
اطلاعات بیشتر: برای اطلاع از چگونگی کار با ابزارهای .NET Uninstall به این آدرس رجوع کنید. |
|
برای مثال، من هر ماه برای برداشتن نسخههای قدیمی از دستور زیر استفاده میکنم:
به دلیل
اینکه تکنولوژیهای موروثی (legacy) و غیر-چند-سکویی از .NET برداشته شده، نسخههای جدید .NETکوچکتر
از نسخههای .NET
Framework هستند. برای مثال، Windows
Forms و Windows Presentation
Foundation (WPF) که برای ساختن برنامهها با رابط گرافیکی (GUI) از آنها استفاده میشود، بطور تنگاتنگی به سیستم
ویندوز گره خوردهاند، و به همین دلیل در سیستمعاملهای macOS
و Linux از .NETحذف شدهاند.
یکی از
ویژگیهای .NET
5پشتیبانی برای اجرای برنامههای
Windows Forms و (WPF)با استفاده از Windows Desktop Pack
است که در نسخه ویندوزی
.NET 5 گنجانده شده، و به همین دلیل است که SDK ویندوز از SDKهای مشابه خودش در macOS
و Linux بزرگتر است.
شما میتوانید تغییرات کوچکی را در برنامههای موروثی ویندوزی خودتان ایجاد کنید
تا برنامه شما با .NET 5 سازگار شود، و بتوانید از
ویژگیهای جدید و بهبود سرعت .NET 5 بهرهمند شوید.
ASP.NET
Web Forms و Windows Communication Foundation (WCF) جزء تکنولوژیها قدیمی هستند که قبلاً از آنها برای تولید برنامهها و
سرویسهای وب استفاده میشد، ولی امروز برنامهنویسان کمتر از آنها استفاده میکنند،
بنابراین آنها نیز از .NET 5حذف
شدهاند. بجای آنها، برنامهنویسان ترجیح میدهند از ASP.NET
MVC و ASP.NET Web API استفاده کنند. این دو
تکنولوژی، کلاً بازسازی و با یکدیگر ترکیب شدهاند طوری که در .NET 5
قابل اجراء باشد. نام این تکنولوژی جدید ASP.NET Core است. شما در فصل
15، تحت عنوان ساخت
وبسایتها با استفاده از صفحات ASP.NET Core Razor با آن آشنا میشوید.
اطلاعات بیشتر: برخی از برنامهنویسانی که بر روی .NET Framework کار میکنند، از اینکه ASP.NET Web Forms, WCF, وWindows Workflow (WF) از .NET 5برداشته شدهاند ناراضی هستند، و انتظار دارند مایکروسافت عقیده خودش را در اینمورد تغییر دهد. پروژههای منبع بازی هستند که پروژههای WCF و WFرا قادر میکنند که به .NET 5مهاجرت کنند. برای اطلاعات بیشتر به این آدرس مراجعه کنید. یک پروژه منبع باز نیز برای کمپوننت Blazor Web Forms وجود دارد، که میتوانید با مراجعه به این آدرس اطلاعات لازم را کسب کنید. |
|
Entity Framwork 6
یا (EF6) یک تکنولوژیِ نگاشت شیء-رابطه (ORM)[6]
است که برای کار با دادههایی که در یک پایگاهِ دادهِ رابطهای، نظیر Oracle و Microsoft SQL Server،
ذخیره شدهاند از آن استفاده میشود. این تکنولوژی در طول سالهای گذشته خیلی بزرگ
شده بود، بنابراین در نسخه چند-سکویی از حجم آن کاسته شد، و پشتیبانی پایگاههای
غیر-رابطهای نظیر Microsoft Azure Cosmos DB نیز به آن افزوده شده. نام جدید آن نیز Entity
Framework Core است. شما در فصل 11، تحت عنوان کار با پایگاههای داده با استفاده
از Entity Framework Core با این تکنولوژی آشنا
میشوید.
درصورتی که برنامههایی دارید که از EF قدیمی استفاده میکنند، نسخه 6.3 آن در .NET Core 3.0 به بالا پشتیبانی میشود.
اطلاعات بیشتر: هرچند لغت Core از .NET 5از قلم افتاده، هم ASP.NET Core و هم Entity Framework Core هنوز لغت Core را در نام خودشان خواهند داشت تا تمایز آنها با تکنولوژیهای موروثی قدیمی مشخص باشد. برای اطلاع بیشتر به این آدرس رجوع کنید. |
|
مایکروسافت علاوه بر اینکه برای ساختن .NET Core
بخش عظیمی از
.NET Framework را از آن برداشت، .NET
را به
پکیجهای NuGet تقسیم کرد. اینها بخشهای
کوچکی هستند که میتوانند بصورت مستقل دانلود و مستقر شوند.
هدف اولیه
مایکروسافت این نیست که .NET
را کوچکتر از .NET
Framework بسازد، بلکه هدف این است که .NETرا طوری به اجزای کوچکتر تقسیم کند که از تکنولوژیهای جدید پشتیبانی کرده و
حداقل وابستگی را داشته باشند، تا استقرار آنها فقط به پکیجهایی محدود شود که
برنامهها واقعاً به آنها نیاز دارند.
وضعیت .NETدر سال 2019 به این صورت بود که 3 سکوی .NETوجود داشت که توسط مایکروسافت کنترل میشد:
·
.NET Core: برای برنامههای چند-سکویی.
·
.NET Framework: برای برنامههای قدیمی موروثی.
·
Xamarin: برای برنامههای
موبایل.
به دلیل
اینکه هر یک از اینها برای سناریوهای مختلفی طراحی شده بودند، هرکدام تواناییها و
ضعفهای خودشان را داشتند. بنابراین این مشکل وجود داشت که یک برنامه نویس باید سه
سکوی مختلف را یاد میگرفت، که هر یک محدودیتها و خصوصیات عجیب خودش را داشت. به
همین دلیل مایکروسافت استاندارد .NET را تعریف کرد، یعنی خصوصیات
یک مجموعه از APIها، که کلیه سکوهای .NET بتوانند آنها را پیادهسازی کنند و حاکی از این باشد که آنها چه سطحی از
سازگاری را دارند. برای مثال، سکویی که که با استاندارد 1.4
.NET
سازگار باشد، دارای سازگاریِ پایه است.
با بیرون
آمدن استاندارد .NET
2و بالاتر، مایکروسافت کلیه
سکوها را به سمت یک استاندارد حداقلی سوق داد، و این کارِ برنامه نویسان را راحتتر
میساخت و آنها میتوانستند در هر سه سکوی .NET از برنامههای مشترک استفاده
کنند.
برای .NET 2و بالاتر، تعدادی از APIها برداشته شده بودند، ولی برای انتقال
برنامههایی که قبلاً به .NET Frameworkنوشته شده بود به .NET
Core، وجود آنها لازم بود. برخی از APIها پیادهسازی شدند ولی در هنگامِ اجراء یک اعتراض (exception) از خودشان بروز میدادند
تا در واقع به کاربر بگویند نباید از آنها استفاده کند! این به سیستمعاملی بستگی
دارد که شما .NETرا در آن اجراء میکنید. ما در فصل
2، تحت عنوان صحبت
به زبان C#
چگونگی رسیدگی به این
اعتراضها را توضیح خواهیم داد.
مهم است
بدانید که استاندارد .NETفقط یک استاندارد است. همانطور که مثلاً شما
نمیتوانید HTML5 را نصب کنید، نمیتوانید
استاندارد .NETرا هم نصب کنید. برای استفاده از HTML5 شما باید مرورگری را نصب کنید که استاندارد HTML5 را پیادهسازی کرده باشد.
برای
استفاده از استاندارد .NETشما باید سکویی را نصب کنید که ویژگیهای
نسخه مورد نظر استاندارد .NET را پیادهسازی کرده باشد. استاندارد .NET 2.0 به وسیله آخرین نسخههای .NET Framework، .NET Core، و Xamarin پیادهسازی شده است.
آخرین
استاندارد .NET
، یعنی 2.1،
فقط توسط .NET
Core 3.0، Mono، و Xamarin پیادهسازی شده. برخی از ویژگیهایC# به استاندارد .NET 2.1 نیاز دارند. استاندارد .NET 2.1 توسط .NET Faramework
پیادهسازی نشده، بنابراین .NET Framework باید بعنوان یک سکوی موروثی
در نظر گرفته شود.
هنگامی که در نوامبر 2021 .NET 6 بیرون بیاید، نیاز به
استاندارد .NET بطور
چشمگیری کاهش مییابد، زیرا برای کلیه سکوها، از جمله موبایل، تنها یک .NET وجود خواهد
داشت. ولی حتی در آن زمان نیز نیاز است از برنامهها و وبسایتهایی که با .NET Framework
ساخته شوند پشتیبانی شود، بنابراین مهم است که بدانید شما میتوانید کتابخانههای
کلاس استاندارد .NET
2.0 را ایجاد کنید که با سکوهای.NET موروثی سازگار باشد.
اطلاعات بیشتر: فهرست نسخههای استاندارد .NET و اینکه کدام سکوها از آنها پشتیبانی میکنند در این آدرس آمدهاند. |
|
مایکروسافت قول داده که تا پایان سال 2021 یک سکوی .NET واحد بیرون بیاید.
قرار است که .NET
6 یک کتابخانه کلاس پایه (BCL)
و دو حیناجراء داشته باشد، که یکی برای سرورها یا دسکتاپها (مثلاً وبسایتها و
برنامههای ویندوزی دسکتاپ که بر پایه حیناجراء .NET Core) بهینه شده، و
دیگری برای برنامههای موبایل که بر پایه حیناجراء Xamarin
هستند بهینه شده.
کامپایلر
زبان C# (که Roslyn نام دارد)، توسط ابزار dotnet CLI بکار گرفته میشود تا برنامههایC#
را به کُدهای زبان میانی (IL)[7]
تبدیل کند و آنها را در یک اسمبلی، یا مجتمع، (که به صورت یک
فایل DLL یا EXE
است) ذخیره کند. کدهای IL شبیه دستورات زبان
اسمبلی هستند و توسط ماشین مجازی .NET (که بعنوان CoreCLR
شناخته میشود) اجراء میشوند.
در زمان
اجراء، CoreCLR
کدهای IL
را از اسمبلی بارگیری میکند و کامپایلر ([8]JIT)
آنها را به دستورات بومی CPU ترجمه میکند، و سپس آنها
در CPU کامپیوتر شما اجراء میشوند.
مزیت این روندِ کامپایلِ سه مرحلهای این است که مایکروسافت علاوه بر ویندوز قادر
است برای لینوکس و مکاواس نیز CLRهایی را بسازد. کد IL
که در مرحله اول تولید شده، بدلیل اینکه در مرحله دوم به دستورات بومی CPU ترجمه میشود، میتواند در هر سکویی که مرحله دوم
کامپایل را انجام میدهد اجراء شود.
صرفنظر
از اینکه کد مبدا به چه زبانی نوشته شده باشد (مثلاً C#،
Visual Basic، یا F#)،
کلیه برنامههای .NET
برای دستورات خودشان از کدهای IL استفاده میکنند که
در یک اسمبلی ذخیره شده است. مایکروساف و برخی از شرکتهای دیگر ابزارهای disassembler، مثل ILSpy، را فراهم آوردهاند
که میتواند یک اسمبلی را باز کرده و کدهای IL
آنها را آشکار کنند.
ما میتوانیم تکنولوژیهای مختلف .NET که در سال 2020
موجودند را در جدول زیر خلاصه کنیم:
تکنولوژی |
توضیحات |
سیستمعاملهای میزبان |
.NET 5 |
پشتیبانی از ویژگیهای مدرن، پشتیبانی کامل از C# 9، امکان انتقال برنامهها قدیمی و ایجاد برنامههای جدید ویندوز و سرویسهای وب |
Windows, macOS, Linux |
.NET Framework |
پشتیبانی از ویژگیهای موروثی، پشتیبانی محدود از C# 8، ولی از C# 9 پشتیبانی نمیکند، پشتیبانی از برنامههای موجود. |
Windows فقط |
Xamarin |
فقط برنامههای موبایل و دسکتاپ. |
Android,iOS, macOS |
هدف این بخش
چگونگی ساخت یک برنامه کنسولی توسط Visual Studio Code است. هم دستورات و هم تصاویر این بخش به macOS
مربوط هستند، ولی آنها برای Windows و Linux هم کاربرد دارند.
تفاوت
عمده در عملیات خط فرمانی، مثلاً حذف فایلها، است. ولی خوشبختانه دستورهای dotnet در کلیه سکوها یکسان
است.
بیایید
کار خودمان را شروع کنیم.
1.
Visual Studio Code را باز کنید.
2.
در macOS
به File | Open… بروید، در ویندوز به File | Open Folder… بروید. همانطور که در شکل زیر نشان داده شده،
در هر دو سیستم عامل میتوانید از طریق قاب EXPLORER
بر روی دکمه Open Folder کلیک کنید.
شکل 1.4: Visual Studio Code
Welcome tab
3.
در مکاواس، در دیالوگ باکس به فولدر کاربری خودتان، یا
در ویندوز به فولدر Documents، یا هر فولدر دیگری که میخواهید پروژه شما در
آن ذخیره شود بروید.
4.
بر روی دکمه New Folder بزنید و اسم فولدر ایجاد
شده را Code
بگذارید.
5.
در فولدر Code فولدر جدیدی بنام Chapter01 ایجاد کنید.
6.
در فولدر Chapter01
فولدری بنام HelloCS
ایجاد کنید.
7.
در مکاواس فولدر HelloCS
را با کلیک کردن روی Open
انتخاب کنید، یا در ویندوز روی Select Folder کلیک کنید.
8.
در مکاواس به View | Terminal بروید، یا در ویندوز دکمه
(Ctrl + ') را فشار دهید
(کنترل+کوتیشن تکی).
9.
در Terminal دستور زیر را وارد کنید:
10.
شما میبینید که دستور dotnet در فولدر جاری یک
پروژه کنسولی را ایجاد کرده، و همانطور که در شکل زیر دیده میشود، پنجره EXPLORER دو فایل ایجاد شده،
به نامهای HelloCS.proj و Program.cs را نشان میدهد:
شکل 1.5: پنجره EXPLORER باید دو فایلی که ایجاد شده را نشان دهد.
11.
در EXPLORER بر روی فایل Program.cs کلیک کنید تا در
پنجره ویرایش باز شود. اگر اولین بار است که اینکار را انجام میدهید، ممکن است VSC مجبور باشد برخی وابستگیهای C#،
مثل OmniSharp،
Razor Language Server، و .NET Core debugger
را دانلود و نصب کند.
12.
اگر پیامی را گرفتید که میگوید
داراییهای (assets) لازم وجود ندارند،
همانطور که در شکل زیر نشان داده شده بر روی Yes
کلیک کنید.
شکل 1.6: پیام هشدار در مورد اضافه کردن داراییهای لازم
13.
بعد از چند لحظه، فولدری بنام .vscode
در EXPLORER
ظاهر میشود. در این فولدر چند فایل قرار دارد که در طول اشکالزدایی (debugging)
از آنها استفاده میشود (توضیحات مفصلتر در فصل 4 ).
14.
در خط 9 فایل Program.cs،
رشته "Hello World!"، را به رشته
"Hello C#!" تغییر دهید.
15.
به File | Auto Save بروید. این باعث میشود قابلیت ذخیره خودکار فعال شود و
نیاز نباشد با هر تغییر در برنامه آن را save
کنید.
کار بعدی
ما این است که برنامه را کمپایل کرده و سپس آن را اجراء کنیم:
1.
به View | Terminal
بروید و در داخل ترمینال دستور زیر را وارد کنید:
2.
همانطور که در شکل زیر دیده میشود،
خروجی پنجره TERMINAL نتیجه اجراء برنامه
شما را نشان میدهد:
شکل 1.7: خروجی برنامه شما
ممکن است
تصور کنید که تنها برای اینکه پیام Hello, C#!
روی صفحه چاپ شود، برنامه فوق زیاد از حد طولانی بود، ولی آیا راه سادهتری هم
هست؟
خوب، در C# 9 چنین چیزی هست و برنامههای
سطح-بالا (top-level programs) نامیده میشود.
بیایید یک برنامه کنسولی قدیمی را در زیر ببینیم:
در زیر یک برنامه حداقلیِ سطح-بالا که معادل برنامه
فوق باشد را میبینید:
این نسبت به برنامههای قدیمی خیلی سادهتر است،
اینطور نیست؟ این بهتر از این است که شما کارتان را با یک فایل خالی شروع کنید و
خودتان همه دستورات را بنویسید.
کلیه
کدهای لازم و جاگیر که کلاس Program
و متد Main آن را تعریف میکنند،
بطور خودکار در هنگام کامپایل به برنامه اضافه شده و به دور عباراتی که شما نوشتهاید
پیچیده میشود. ولی هنوز هم کلیه دستورات using باید در بالای فایل نوشته شوند. در یک پروژه، فقط
یک فایل مثل این میتواند وجود داشته باشد.
من خودم
شخصاً وقتی C# تدریس میکنم، از همان الگوی
سنتی برای پروژهها استفاده میکنم، زیرا واقعیت را واضحتر نشان میدهد. درست به
همین دلیل من کار کردن با GUIهایی که برای سادهتر کردن کارها عناصری را پنهان میکنند
را نیز دوست ندارم.
برای
مثال، در یک برنامه کنسولی اگر نیاز داشته باشید که آرگومانهایی را به برنامه
بدهید، در یک برنامه سطح-بالا شما دقیقاً باید با این حقیقت آشنا باشید که
پارامترهای بنام args
وجود دارند، هر چند نمیتوانید آن را ببینید.
امروزه Git یک سیستم متداول برای مدیریت منبع برنامه است. نام
شرکت، وبسایت، و برنامه دسکتاپی که کار مدیریت Git
را آسانتر میکند GitHub است. در سال 2018
مایکروسافت GitHub را خرید، بنابراین Git یکپارچگی خودش را با ابزارهای این شرکت حفظ خواهد
کرد.
من برای
ذخیره جواب تمرینهایی که در انتهای هر فصل آمدهاند از GitHub
استفاده کردهام. شما میتوانید برای دسترسی به منبع این فصل به آدرس https://github.com/markjprice/cs9dotnet5
رجوع کنید.
توصیه میکنم
لینک بالا را به لیست bookmarkهای خودتان اضافه کنید، زیرا من از مخزن GitHub برای کلیه موارد مربوط به این کتاب، از جمله تغییرات و
غلطنامه این کتاب استفاده خواهم کرد.
VSC
از Git پشتیبانی میکند، ولی از Git نصب شده بر روی کامپیوتر شما استفاده میکند، بنابراین
به منظور استفاده از Git در VSC، شما باید از قبل Git 2.0،
یا نسخه بالاتر آن، را نصب کرده باشید.
توسط این لینک میتوانید Git را نصب کنید.
اگر دوست
دارید با برنامه GUI کار کنید، از طریق
آدرس زیر میتوانید برنامه دسکتاپ GitHub
را دانلود کنید:
اجازه دهید تا مخزن جواب تمرینهای کتاب را کپیبرداری (clone) کنیم.
1.
در فولدر Documents، یا هر فولدری که میخواهید
جواب تمرینهای کتاب ذخیره شود، فولدری بنام Repos ایجاد کنید.
2.
از داخل VSC،
فولدر Repos را باز کنید.
3.
به View | Terminal بروید و دستور زیر را
وارد کنید:
4.
توجه داشته باشید که کپی تمرینها
بر روی کامپیوتر شما ممکن است چند دقیقه طول بکشد.
شکل
1.8: کپیبرداری از جواب تمرینهای کتاب
اطلاعات بیشتر: برای اطلاع از کنترل نسخه منبع در VSC به این آدرس رجوع کنید. |
|
این بخش درباره چگونگی یافتن اطلاعات
مربوط به برنامهنویسی در وب است.
معتبرترین منبع برای کمک گرفتن در
مورد ابزارهای برنامهنویسی مایکروسافت Microsoft Docs است، که شما میتوانید از
طریق لینک https://docs.microsoft.com به آن دسترسی پیدا کنید.
با استفاده از خط فرمان dotnet
شما میتوانید در مورد دستورات آن کمک بگیرید.
1.
برای باز کردن مستندات رسمی
برای دستور dotnet new،
در پنجره مرورگر دستور زیر را در ترمینال VSC
وارد کنید:
2.
برای نمایش کمک در کنسول،
مانند زیر از فلگ -h یا
--helpاستفاده کنید:
3.
شما یک خروجی شبیه زیر را
خواهید گرفت:
یکی از
مفیدترین کلیدهای میانبر در VSC کلید F12 است، که از آن برای رفتن به Go To Definition
استفاده میشود. با اینکار تعاریف عمومی یک گونه و اعضای آن از طریق خواندن فرادادههایی
که در اسمبلی کامپایل شدهاند نمایش داده میشود. برخی از ابزارها، مثل ILSpy .NET Decompiler حتی میتوانند
فرادادهها را خوانده و کدهای IL را دوباره به کدهای C# تبدیل کنند.
برای
مشاهده طریق استفاده از ویژگی Go To Definition
مراحل زیر را انجام دهید:
1.
در VSC
فولدر HelloCS را باز کنید.
2.
در فایل Program.cs,
متد Mainرا تغییر دهید و یک متغیر بنام z
را اعلان کنید:
int z;
3.
روی int کلیک کرده و دکمه F12 را فشار دهید، و یا
کلیک راست کرده و Go To Definition را انتخاب کنید. شما
میتوانید چگونگی تعریف گونه int
را در داخل پنجره جدیدی که ظاهر میشود مشاهده کنید:
شکل 1.9: تعریف گونه int.
در اینجا
شما میتوانید ببینید که int:
·
با استفاده از کلیدواژه struct تعریف شده.
·
در داخل اسمبلی System.Runtime قرار دارد.
·
در فضای اسمی System است.
·
نام اصلی آن Int32 است.
·
در
نتیجه int
یک نام مستعار برای گونه System.Int32 است.
·
اینترفیسهایی
نظیر IComparable را پیادهسازی کرده است.
·
برای مقادیر بیشنه و کمینه خودش
دارای مقادیر ثابتی است.
·
متدهایی مثل Parse دارد.
روشهای خوب: هنگامی که از Go To Definition اسفاده میکنید، برخی اوقات ممکن است پیام خطای No definition found را دریافت کنید. دلیل این مورد این است که افزونه C# چیزی درباره پروژه جاری نمیداند. به View | Command Palette بروید، OmniSharp: Select Project را وارد کرده و آن را انتخاب کنید، و سپس پروژه صحیحی که میخواهید با آن کار کنید را انتخاب کنید. |
|
بدلیل اینکه شما با اصطلاحاتی که Go To Definition به شما نشان میدهد آشنا
نیستید، فعلاً این ویژگی برای شما خیلی مفید نیست.
زمانی که به انتهای قسمت اول این کتاب، که C# را به شما یاد میدهد، رسیدید، آنگاه به اندازه
کافی از این زبان اطلاع دارید، و خواهید دید که چقدر میتواند برای شما مفید باشد.
4.
در پنجره ویرایش برنامه پایین
بیاید تا به متد Parse برسید که تنها یک پارامتر از نوع string میگیرد. در آنجا (خط 87)
توضیحات مربوط به این متد را میبینید:
شکل 1.10: توضیحات مربوط به متد Parse.
در این
توضیحات شما میبینید که مایکروسافت اعتراضاتی که ممکن است در طول فراخوانی این
متد رخ دهد را مستند کرده، از جمله ArgumentNullException, FormatException, و
OverflowException.
حالا ما میدانیم که چرا نیاز است در هنگام فراخوانی این متد باید آن را در داخل یک
عبارت try بپیچیم.
امیدوارم برای
یادگرفتن معنی این اصطلاحات حوصله داشته باشید!
کمی صبور
باشید. شما تقریباً به انتهای این فصل رسیدهاید، و در فصل بعد با جزئیات زبان C# آشنا خواهید شد. ولی بیایید ببینیم برای کمک گرفتن چه
جاهای دیگری را میتوانید جستجو کنید.
Stack Overflow پرطرفدارترین وبسایت
برای کمک گرفتن در مورد سئوالات دشوار برنامهنویسی است. محبوبیت این سایت چنان زیاد است که
موتورهای جستجو مثل DuckDuckGo روش خاصی برای نوشتن
پرس و جو در این سایت دارند.
1.
مرورگر خودتان را باز کنید.
2.
به سایت DuckDuckGo.com بروید، و پرسمان (query) زیر را وارد کنید و
به نتایج جستجو، که آنها نیز در زیر نشان داده شدهاند، توجه کنید:
!so securestring
شکل 1.11: نتایج جستجو در سایت Stack
Overflow برای securestrin.
با گزینههایی
که Google دارد، شما میتوانید جستجوهای
پیشرفتهای را انجام دهید، و آنچه نیاز دارید را پیدا کنید:
1.
به google.com
بروید.
2.
با یک پرسمان ساده، عبارت garbage collection
را جستجو کنید. شما پیش از اینکه اطلاعاتی درمورد garbage collection که به علوم
کامپیوتری ربط دارد را از سایت ویکیپدیا ببینید، احتمالاً در ابتدای فهرست
اطلاعات زیادی درمورد چگونگی جمع آوری زباله در محله خودتان را خواهید دید!
3.
شما میتوانید نتایج جستجوی
خودتان را به سایتهایی مثل Stack Overflow
محدود کنید. همچنین میتوانید با ذکر C#+،
فقط بر روی سیشارپ متمرکز شوید، و زبانهایی مثل java
را حذف کنید.
garbage collection site:stackoverflow.com +C# -Java
حالا اجازه دهید با مطرح کردن چند سوال و تحقیق، معلومات و آگاهی شما از آنچه در این فصل یادگرفتید را محک بزنیم.
سعی کنید
به سوالات زیر پاسخ دهید، بخاطر داشته باشید که جواب برخی از سوالات را میتوانید
در همین فصل پیدا کنید، ولی پاسخ برخی دیگر نیز به جستجو در اینترنت یا برنامهنویسی
نیاز دارد:
1. چرا برنامهنویسان برای برنامهنویسی .NET میتوانند از زبانهای
مختلفی مثل C#، F#
استفاده کنند؟
2. شما برای ایجاد یک برنامه کنسولی چه چیزی را
باید تایپ کنید؟
3. برای ساختن و اجراء کردن یک برنامه C# چه چیزی را باید تایپ کنید؟
4. کلید میانبر برای نمایش ترمینال در VSC چیست؟
5. آیا Visual Studio
2019 از VSC بهتر است؟
6. آیا .NET Core از .NET Framework
بهتر است؟
7. استاندارد .NET چیست و چرا هنوز مهم است؟
8. نام متدی که در برنامههای کنسولی نقطه
ورودی محسوب میشود چیست و چگونه باید اعلان شود؟
9. کجا میتوان یک کلیدواژه C# را جستجو کرد؟
10. از چه منابعی میتوانید برای کمک گرفتن
درمورد مشکلات برنامهنویسی کمک گرفت؟
برای
نوشتن برنامههای C# نیازی به VSC یا حتی Visual Studio 2019
یا Visual Studio 2019 for mac
ندارید. شما میتوانید به .NET Filddle
بروید و بصورت آنلاین شروع به
برنامهنویسی کنید.
شما میتوانید
با دنبال کردن آدرسهای زیر جزئیات بیشتری را درمورد موارد مطرح شده در این فصل
بخوانید:
•
Visual Studio Code documentation:
https://code.visualstudio.com/docs
• .NET:
• .NET Core Command-Line Interface (CLI) tool:
https://aka.ms/dotnet-cli-docs
• .NET Core runtime, CoreCLR:
https://github.com/dotnet/runtime
• .NET Core Roadmap:
https://github.com/dotnet/core/blob/master/roadmap.md
• .NET Standard FAQ:
https://github.com/dotnet/standard/blob/master/docs/faq.md
• Stack Overflow:
• Google Advanced Search:
https://www.google.com/advanced_search
• Microsoft Learn:
https://docs.microsoft.com/en-us/learn/
• .NET Videos:
https://dotnet.microsoft.com/learn/videos
• Microsoft Channel 9 – .NET Videos:
https://channel9.msdn.com/Search?term=. net&lang-en=true
در این فصل ما این کارها را انجام دادیم:
· محیط برنامهنویسی شما را برپا کردیم.
·
تفاوتهایی که بین .NET 5, .NET Core, .NET Framework,
Xamarin, و .NET Standard بود را شرح دادیم.
·
برای ایجاد یک برنامه ساده
کنسولی از Visual Studio Code و .NET SDK استفاده کردیم.
·
یادگرفتیم چگونه از مخزن GitHub جواب تمرینهای این کتاب را دانلود کنیم.
·
و از همه مهمتر، یاد گرفتیم از
چه طریقی میتوانیم کمک بگیریم.
در فصل
بعد شما یاد خواهید گرفت که چگونه به زبان C#
صحبت کنید.
این فصل
درباره اصول زبان برنامهنویسی C# است. در طولِ این فصل
شما یادخواهید گرفت که چگونه با استفاده از دستور زبان C# عبارات مختلفی را بنویسید. همچنین با واژگان روزمره متداول در این زبان
آشنا میشوید. علاوه براین، در انتهای فصل شما به اندازه کافی اعتماد به نفس
خواهید داشت تا اطلاعاتی را بطور موقت در حافظه کامپیوتر ذخیره کرده و با آنها کار
کنید.
در این فصل
موارد زیر پوشش داده میشود:
·
مقدمهای بر C#
·
درک اصول اولیه C#
·
کار با متغیرها
·
کار با مقادیر null
·
بررسی بیشتر برنامههای
کنسولی
این بخش
از کتاب درباره زبان C# است، یعنی دستور زبان
و واژگانی که شما هر روزه در این زبان از آنها استفاده میکنید تا برنامه بنویسید.
زبانهای برنامهنویسی شباهتهای زیادی با زبانهای
انسانی دارند، با این تفاوت که در زبانهای برنامهنویسی شما خودتان میتوانید
لغاتی را بسازید.
این بخش
از کتاب، اصولی از زبان برنامهنویسی C#
را توضیح میدهد که عمدتاً برای مبتدیان نوشته شده، بنابراین پوشش دهنده موضوعات
اساسی است که همه برنامهنویسان باید آنها را بدانند، از اعلان
(declare)
متغیرها گرفته تا ذخیره دادهها و چگونگی تعریف گونههای سفارشی جدید. فعلاً
موضوعات مبهمی، مثل نسبت دهی مجددِ متغیرهای محلی ref و گونههای ارجاعی و مقداری
توضیح داده نمیشوند.
این کتاب کلیه ویژگیهای زبان C# را پوشش میدهد، از نسخه 1.0 گرفته تا آخرین نسخه آن، یعنی
9.0.
درصورتی که شما از قبل با نسخههای اولیه C#
آشنایی دارید و میخواهید با ویژگیهایی آشنا شوید که در آخرین نسخههای C# ارائه شده، من با فهرست کردن نسخههای مختلف این زبان،
اینکار را برای شما آسانتر کردهام.
اطلاعات بیشتر: شما میتوانید با مراجعه به این آدرس اطلاعات بیشتری را درمورد وضعیت جاری زبان C# کسب کنید |
|
C# 1.0 در سال 2002
بیرون آمد، و همانگونه که در فصلهای 2 الی 6 خواهید دید، شامل کلیه ویژگیهای مهم
یک زبان ایستا گونه (statically typed) و شیءگرای مدرن
است.
C# 2.0 در سال 2005 بیرون آمد و روی فعال کردن گونههای قوی توسط ژنریکها (generics)، بهبود سرعت اجراء
برنامه و کاهش خطاهای گونه، از جمله موارد زیر تمرکز داشت:
ویژگی |
فصل |
موضوع |
گونههای نولپذیر |
2 |
قابلیت نولپذیری یک گونه مقداری. |
ژنریکها |
6 |
قابلیت استفاده مجدد بیشتر با استفاده از ژنریکها |
C# 3.0
در 2007 بیرون آمد و بر روی زبان LINQ
(یا زبان پُرسوجوی یکپارچه) و خصوصیاتی مثل گونههای بینام و عبارات لاندا تمرکز داشت:
ویژگی |
فصل |
موضوع |
متغیرهای محلی با گونههای تعریفشده بصورت ضمنی |
2 |
استنتاج گونه یک متغیر محلی. |
LINQ |
12 |
کلیه موضوعات مطرح شده در فصل 12 |
C# 4.0 در 2010 بیرون آمد و بر روی بهبود قابلیت کار میان
زبانهای پویا مثل F# و Python تمرکز داشت.
ویژگی |
فصل |
موضوع |
گونههای پویا |
2 |
گونه dynamic. |
آرگومانهای اسمدار و اختیاری |
5 |
پارامترهای اختیاری و آرگومانهای اسمدار |
C# 5.0 در 2012 بیرون آمد و بر روی سادهتر کردن عملیات غیرهمزمان تمرکز داشت:
ویژگی |
فصل |
موضوع |
سادهتر کردن کارهای غیرهمزمان |
13 |
درک async و await |
C# 6.0
در 2015 بیرون آمد و بیشتر درمورد بهسازی های اندکی بود که بر روی این زبان صورت
گرفته:
ویژگی |
فصل |
موضوع |
واردات پویا |
2 |
آسانتر کردن استفاده از کنسول |
رشتههای درونیابی شده |
2 |
نمایش خروجی به کاربر |
|
6 |
تعریف خاصههای فقط-خواندنی |
C# 7.0 در 2017 بیرون آمد و بر روی اضافه کردن ویژگیهای زبانهای تابعی، مثل چندتاییها (tuples)
و تطبیق الگو تمرکز دارد:
ویژگی |
فصل |
موضوع |
لفظهای دو دویی و جداکننده ارقام |
2 |
ذخیره اعداد صحیح |
تطبیق الگو |
3 |
تطبیق الگو توسط عبارت if |
متغیرهای out |
5 |
کنترل چگونگی فرستادن پارامترها |
چندتاییها |
5 |
ترکیب چندین مقدار با استفاده از چندتاییها |
توابع محلی |
6 |
تعریف توابع محلی |
C# 8.0
در 2019 بیرون آمد و شامل تغییرات اندکی در رابطه با چگونگی رسیدگی به null بود:
ویژگی |
فصل |
موضوع |
گونههای نولپذیر ارجاعی |
2 |
امکان نولپذیری یک گونه ارجاعی |
عبارات switch |
3 |
ساده کردن عبارت switch |
متدهای اینترفیس پیشفرض |
6 |
متدهای اینترفیس پیشفرض |
C# 9.0 در 2020 بیرون آمد و بر روی گونههای رکوردی، بهسازی تطبیق
الگو، و برنامههای کنسولی با حداقل خطوط تمرکز دارد.
ویژگی |
فصل |
موضوع |
برنامه کنسولی با حداقل خطوط |
1 |
برنامههای سطح-بالا |
تطبیق الگوی بهسازی شده |
5 |
تطبیق الگو با اشیاء |
رکوردها |
5 |
کار با رکوردها |
با بیرون
آمدن نسخههای C# 7.x مایکروسافت تصمیم
گرفت نسخههای فرعی متعددی را بیرون دهد.
کامپایلرهای زبان .NET برای C#
و Visual Basic به همراه کامپایلر F#، که Roslyn نامیده میشوند، بصورت
بخشی .NET SDK توزیع میشوند. همانطور که در جدول زیر نشان داده شد، برای استفاده از نسخه
خاصی از C# شما باید حداقل نسخهای از .NET SDK را نصب کرده باشید:
.NET SDK |
Roslyn |
C# |
1.0.4 |
2.0 - 2.2 |
7.0 |
1.1.4 |
2.3 - 2.4 |
7.1 |
2.1.2 |
2.6 - 2.7 |
7.2 |
2.1.200 |
2.8 - 2.10 |
7.3 |
3.0 |
3.0 - 3.4 |
8.0 |
5.0 |
5.0 |
9.0 |
اطلاعات بیشتر: شما میتوانید با مراجعه به این آدرس فهرست نسخههای مختلف کامپایلر C# را مشاهده کنید. |
|
حالا بیایید ببینیم نسخه .NET SDK و کامپایلر زبان C# شما چیست:
1.
VSC را اجراء کنید.
2.
به View | Terminal بروید.
3.
برای تعیین نسخه .NET SDK خودتان دستور
زیر را وارد کنید:
5.
4.
توجه داشته باشید که در زمان
نوشتن این کتاب آخرین نسخه 5.0.100 است. این شماره حاکی از نسخه
اصلی SDK است که بدون هیچ رفعاشکال یا
ویژگیهای جدید بیرون داده شده.
6.
5.
برای تعیین اینکه شما چه نسخهای
از کامپایلر C# را دارید، دستور زیر را وارد
کنید:
6. کلیه نسخههای موجود در زمان نوشتن این کتاب بصورت زیر هستند:
7.
اطلاعات بیشتر: اگر در ویندوز دستور بالا را وارد کنید یک پیام خطا میگیرید. برای رفع این اشکال به آدرس رجوع کنید. |
|
برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
ما در این
فصل درباره انجام عملیات ساده بر روی متغیرها، تصمیمگیری، انطباق الگو، تکرار بلوکی
از عبارات، تبدیل یک گونه به گونههای دیگر، رسیدگی به اعتراضات، و بررسی سرریز
متغیرهای عددی صحبت خواهیم کرد.
این فصل
موارد زیر را پوشش میدهد:
·
عملیات بر روی متغیرها
·
عبارات انتخاب کننده
·
عبارات تکرار کننده
·
قالبگیری و تبدیل گونهها
·
رسیدگی به اعتراضات
·
بررسی سرریز
کاری که عملگرها (Operators) میکنند انجام
عملیات ساده، مثل جمع و ضرب، بر روی عملوندهایی
(operands)،
مثل متغیرها و مقادیر لفظی، است. آنها معمولاً مقدار جدیدی را بازمیگردانند که
نتیجه عمل مورد نظر است و میتواند به یک متغیر نسبت داده شود.
بیشتر
عملگرها دوتایی هستند، که یعنی آنها بر روی دو عملوند کار میکنند:
برخی از عملگرها یکتایی (unary)
هستند، که یعنی تنها بر روی یک عملوند کار میکنند، و میتوانند پیش یا بعد از
عملوند بکار روند:
مثالهایی از عملگرهای یکتایی شامل افزایشدهندهها
و گرفتن اندازه یک گونه بر حسب بایت هستند:
ما همچنین عملگر سهتایی نیز داریم که بر
روی سه عملوند کار میکند.
دو تا از
متداولترین عملگرها یکتایی، عملگر افزاینده
(++)، و عملگر
کاهنده (--) هستند. بیایید به
چند مثال در اینمورد توجه کنیم:
1. اگر فصل قبل را مطالعه کرده باشید، آنگاه شما از قبل در
فولدر کاربری خودتان فولدری بنام Code
را دارید. در غیراینصورت، آن را ایجاد کنید.
2. در داخل فولدر Code فولدر جدیدی بنام Chapter03 ایجاد کنید.
3. برنامه VSC
را اجراء کنید، و اگر فضایکاری یا فولدری باز هست آن را ببندید.
4. فضای کاری جاری را در داخل Chapter03 بنام Chapter03.code-workspace
ذخیره کنید.
5. فولدر جدیدی بنام Operators ایجاد کنید و آن را به فضای کاری Chapter03 اضافه کنید.
6. به Terminal | New
Terminal بروید.
7. در داخل ترمینال، دستور ایجاد یک برنامه
کنسولی جدید را در فولدر Operators
صادر کنید.
8. فایل Program.cs را باز کنید.
9. بصورت ایستا System.Console
را وارد کنید.
10. در داخل متد Main عبارات زیر را وارد کنید، تا دو متغیر
بنامهای a
و b، از گونه عدد صحیح را
اعلان کرده، به a
مقدار 3
را بدهید، و سپس درحالیکه a
را یک واحد افزایش میدهید، نتیجه را به b نسبت دهید:
11. قبل از اینکه برنامه را اجراء کنید از
خودتان سوال کنید ”مقدار b
چه خواهد بود؟“ هنگامی که جواب را پیدا کردید، برنامه کنسولی را اجرا کنید، و
نتیجهای که بدست آورده بودید را با نتیجه واقعی مقایسه کنید.
دلیل
اینکه مقدار b هنوز 3 است این است که
عملگر ++ پس از نسبتدهی انجام میشود، و دراینصورت یک عملگر پسوندی (postfix) نامیده میشود. اگر
لازم است افزایش متغیر پیش از نسبتدهی انجام شود، از عملگر پیشوندی (prefix) استفاده کنید.
12. از عبارات فوق کپی گرفته و آنها را در زیر
خطوط قبلی الحاق کنید، و سپس آنها را بصورت زیر تغییر دهید، تا بجای عملگر
افزاینده پسوندی، از عملگر افزاینده پیشوندی استفاده شود:
13. برنامه کنسولی را اجراء کرده و به خروجی آن
توجه کنید:
روشهای خوب: بدلیل سردرگمی که در استفاده از عملگرهای پیشوندی و پسوندیِ افزایشی و کاهشی، و ترکیب آنها با نسبتدهی وجود دارد، من توصیه میکنم که هیچ وقت عملگرهای ++ و -- را با یک عملگر نسبتدهی (=) ترکیب نکنید. در صورت لزوم، هر کدام از آنها را بشکل عبارات جداگانه انجام دهید. |
|
عملگرهای
کاهش و افزایش، عملگرهای حسابی یکتایی هستند. عملگرهای حسابی دیگر معمولاً
دوتایی هستند و بر روی دو عدد صورت میگیرند:
1.
عبارات زیر را در انتهای متد Main اضافه کنید تا چگونگی کارکردِ پنج عملگر متداول
حسابی را مشاهده کنید:
2.
برنامه کنسولی را اجرا کرده و
به نتایج آن توجه کنید:
برای درک
عملگر تقسیم /، و باقیماندهگیری %، شما باید درسهای
مدرسه ابتدایی را بخاطر آورید. فرض کنید شما یازده شکلات و سه دوست دارید. چگونه
میتوانید شکلاتها را بین دوستانتان تقسیم کنید؟ شما میتوانید به هر نفر از دوستانتان
سه شکلات بدهید، و دو تا برایتان باقی میماند. آن دو شکلات همنهشتی (modulus) نام دارند، که باقیمانده تقسیم نیز هست. اگر شما دوازده شکلات
داشتید، در آنصورت هر یک از دوستان چهار شکلات را میگرفتند، و هیچ شکلاتی باقی
نمیماند، بنابرای باقیمانده تقسیم 0 خواهد بود.
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره نوشتن توابع و استفاده مجدد از برنامهها، اشکالزدایی خطاهای منطقی در طول
برنامهنویسی، ثبت اعتراضات در طول زمان-اجراء، و آزمایش واحدی برای حذف اشکالات و
اطمینان از پایداری و کیفیت برنامه است.
این فصل
موارد زیر را پوشش میدهد:
·
نوشتن توابع
·
اشکالزدایی در طول برنامهنویسی
·
وقایعنگاری در طول اجراء
·
آزمایش واحدی
یک اصل
مهم در برنامهنویسی این است که کار تکراری نکنید
(DRY[9]).
اگر شما
در هنگام برنامهنویسی حس کنید که دارید عباراتی را بارها و بارها تکرار میکنید، در
اینصورت باید این عبارات را به یک تابع تبدیل کنید. توابع مانند برنامههای کوچکی
هستند که یک وظیفه کوچک را انجام میدهند. برای مثال ممکن است شما تابعی را
بنویسید که مالیات فروش را حساب کند و سپس از آن تابع در بسیاری از برنامههای
مالی که مینویسید مجدداً استفاده کنید.
مانند
برنامهها، توابع نیز معمولاً ورودیها و خروجیهایی دارند. برخی اوقات توابع را
بعنوان جعبههای سیاهی توصیف میکنند که از یک طرف مواد خام را به آنها میدهید، و
از طرف دیگر یک جنس ساخته شده را تحویل میگیرید. هنگامی که تابعی ساخته شد، نیازی
نیست که در مورد چگونگی کار آن نگران باشید.
فرض کنید میخواهید به فرزند خودتان کمک کنید تا
جدول ضرب را بهتر یاد بگیرد، بنابراین شما میخواهید کلیه مضربهای یک عدد، مثل 12، را تولید کنید:
شما قبلاً چگونگی کار با عبارت for را یادگرفتید، بنابراین میدانید هنگامی که یک الگوی
ثابت، مثل مضربهای 12،
وجود دارد، میتوان از عبارت for برای تولید خطوط
تکراری استفاده کرد:
بیایید با
ایجاد تابعی که یک جدول ضرب را نمایش میدهد توابع را بیشتر بررسی کنیم:
1-
در فولدر code فولدری بنام Chapter04
ایجاد کنید.
2-
برنامه VSC
را اجراء کنید. تمام فولدرها یا فضاهایکاریِ باز را ببیندید، و فضای کاری جاری را
بنام Chapter04.code-workspace ذخیره کنید.
3-
در فولدر Chapter04 فولدری بنام WritingFunctions ایجاد کرده و آن را
به فضای کاری اضافه کنید، سپس یک برنامه کنسولی جدید را در WritingFunctions
ایجاد کنید.
4- فایل Program.cs
را بصورت زیر تغییر دهید:
در برنامه فوق به موارد زیر توجه کنید:
·
گونه Console را بطور ایستا وارد کنید تا
آسانتر بتوانید متدهایی مثل WriteLine را فراخوانی کنید.
·
ما تابعی بنام TimesTable را نوشتیم که باید یک
مقدار byte بنام number
را به آن بفرستیم.
·
TimesTable هیچ مقداری را به
فراخواننده خودش بازنمیگرداند، بنابراین آن را با کلیدواژه void اعلان
کردهایم.
·
TimesTable از عبارت for استفاده میکند تا جدول ضرب عددی که به آن
فرستاده شده را نمایش دهد.
·
ما تابعی بنام RunTimesTable نوشتهایم که از
کاربر درخواست میکند عددی را وارد کند، و سپس تابع با فرستاندن این عدد به تابع TimesTable آن را فراخوانی میکند.
تا زمانی که کاربر عدد معتبری را وارد کند، حلقه ادامه دارد.
·
ما RunTimesTable را در متد Main فراخوانی کردهایم.
5-
برنامه کنسولی را اجراء کنید.
6-
عدد مجازی، مثل 6، را وارد کنید، و سپس
نتیجه را مشاهده کنید:
تابع قبلی عملیاتی را انجام میداد (یک حلقه را طی میکرد و چیزی را در کنسول مینوشت)، ولی مقداری را باز نمیگرداند. ولی فرض کنید بخواهیم مالیات بر افزش افزوده (VAT) را حساب کنیم. در اروپا VAT میتواند بین %8 (در سوئیس) تا %27 (در مجارستان) باشد. در ایالات متحده، مالیاتِ ایالتیِ فروش میتواند بین %0 (در اورگون) تا %8.25 (در کالیفرنیا) باشد:
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره ساخت گونههایِ خوتان با استفاده از برنامهنویسی
شیءگرا (OOP)[10] است. شما کلیه اعضاء مختلفی که یک گونه میتواند
داشته باشد را یادخواهید گرفت، از جمله فیلدها که برای ذخیره دادهها بکار میروند،
و متدها که برای انجام فعالیتها از آنها استفاده میشود. در این فصل شما از
مفاهیم مختلف OOP، مثل تجمیع (aggregation) و لفافهبندی (encapsulation) استفاده خواهید کرد.
همچنین از ویژگیهای جدید زبان C# مانند چندتاییها (tuple)، متغیرهای out، نامهای چندتایی نتیجهگرفته
شده (inferred tuple names)، و الفاظ
پیشفرض (default literals) آشنا خواهید شد.
این فصل
موارد زیر را پوشش خواهد داد:
·
برنامهنویسی شیءگرا
·
ساخت کتابخانههای کلاس
·
ذخیره دادهها در فیلدها
·
چگونگی نوشتن و فراخوانی متدها
·
کنترل دسترسی با ویژگیها و
اینکسسازها
·
انطباق الگو با اشیاء
·
کار با رکوردها
در دنیای
واقعی، یک شیء چیزی مثل یک ماشین یا یک شخص است ، درحالیکه در برنامهنویسی شیء نمایانگرِ
چیزی در جهان واقعی است، چیزهایی مثل محصولات تولیدی یا حساب بانکی، ولی میتواند
چیزِ انتزاعیتری نیز باشد.
در بیشتر
مواقع ما برای تعریف گونهِ اشیاء از کلیدواژه class،
و در بعضی موارد هم از کلیدواژه struct
استفاده میکنیم. شما بعداً در فصل 6، تفاوت میان classها و structها را یادخواهید گرفت. شما میتوانید گونه (type) یک شیء را بعنوان
طرحکلی یا الگوی آن شیء در نظر بگیرید.
در زیر
مفاهیم کلی برنامهنویسی شیء-گرا بطور خلاصه توضیح داده شده است:
·
لفافهبندی (Encapsulation): ترکیب دادهها و
فعالیتهایی است که به یک شیء مربوط هستند. برای مثال، یک گونه BankAccount (حساب بانکی) ممکن است دادههایی مثل Balance (ماندهحساب)، AccountName
(صاحب حساب)، و عملیاتی مثل Deposit
(به حساب گذاشتن)، Withdraw (از حساب برداشتن) را شامل شود. هنگام لفافهبندی، شما
اغلب میخواهید کنترل کنید که چه چیزی میتواند به آن عملیات و دادهها دسترسی
داشته باشد، مثلاً چگونه وضعیت یک شیء از بیرون میتواند مورد دسترسی قرار گیرد یا
دادههای آن تغییر کند.
·
ترکیب (Composition): درباره این
است که یک شیء از چه ساخته شده. مثلاً یک ماشین از قطعات مختلفی مثل، چرخها،
صندلیها، موتور، و غیره تشکیل شده.
·
تجمیع (Aggregation):
درباره این است که یک شیء میتواند با چه چیزهایی ترکیب شود. برای مثال، یک انسان
بخشی از یک شیء ماشین نیست، ولی میتواند در صندلی راننده بنشیند و به رانندهِ
ماشین بدل شود، بعبارتی اشیاء مختلف در هم تجمیع میشوند تا مولفه (component) جدیدی را تشکیل
دهند.
·
وراثت (Inheritance): درباره
استفاده مجدد از برنامهها موجود است. به این صورت که از یک کلاس موجود، که به آن
کلاس پایه (base)
یا اَبَرکلاس (superclasses)
میگویند، یک زیرکلاس منشعب (derived)
میشود، بعبارتی، کلاسِ منشعب شده کلیه کارکردهای کلاس پایه را به ارث میبرد
و به آنها دسترسی خواهد داشت. برای مثال کلاس پایهِ Exception چند عضو دارد که در میان همه
کلاسهای اعتراضِ منشعب شده، دارای پیادهسازی یکسانی هستند. برای مثال کلاس SqlException همه اعضای کلاس پایه Exception را دارد، ولی خودش
نیز تعدادی عضو دارد که به اعتراضاتِ خاصِ پایگاه داده SQL
مربوط است، چیزهایی مثل اتصال پایگاه داده.
·
انتزاع (Abstraction): درباره گرفتن ایده
اصلی یک شیء و نادیده گرفتن جزئیات یا خصوصیات آن است. C# دارای کلیدواژهای بنام abstract است که به این مفهوم شکل میدهد. اگر یک کلاس بطور صریح abstract اعلان نشده باشد، به
آن غیرانتزاعی (concrete)
گفته میشود. اغلب کلاسهای پایه، یا اَبَرکلاسها، انتزاعی هستند. مثلاً کلاس
پایه Stream از نوع انتزاعی، و کلاسهای
منشعب از آن، مثل FileStream
و MemoryStream غیرانتزاعی هستند. فقط از کلاسهای غیرانتزاعی میتوان برای ساخت اشیاء
استفاده کرد؛ کلاسهای انتزاعی فقط میتوانند به عنوان کلاس پایه برای کلاسهای
دیگر بکار گرفته شوند، زیرا آنها فاقد برخی از پیادهسازیهای لازم هستند. استفاده
از کلاسهای انتزاعی مستلزم دقت است. هر قدر شما یک کلاس را انتزاعیتر کنید، کلاسهای
بیشتری میتوانند از آن ارثبری کنند، ولی در عین حال، برای کلاسهای به ارث رسیده
کارآیی مشترک کمتری وجود دارد.
·
چندریختی (Polymorphism): درباره این است که
کلاس منشعب شده، متدهای کلاس پایه را باطل کرده و خودش آن را بازتعریف کند.
مجتمعهای
کتابخانهِ کلاس (اسمبلیها)، گونههای
مختلف را در واحدهای قابل توزیع (که به شکل فایلهای DLL
هستند) گروهبندی میکنند. جدا از آزمایشهای واحدی، تا اینجا شما فقط برنامههای
کنسولی را ساختهاید. برای اینکه برنامههایی که مینویسید در پروژههای متعدد
قابل استفاده باشند، شما باید آنها را در مجتمعهای کتابخانهِ کلاس قرار دهید، و
این همان کاری است که مایکروسافت انجام میدهد.
اولین
کاری که باید انجام دهیم ایجاد یک کتابخانه کلاس .NET با قابلیتِ استفاده مجدد است:
1.
در فولدر Code فولدری بنام Chapter05 ایجاد کرده و سپس در
آن زیرفولدری بنام PacktLibrary بسازید.
2.
در VSC
به File | Save
Workspace As…
بروید، نام Chapter05 را وارد کرده، Chapter05 را انتخاب کنید، و روی Save کلیک کنید.
3.
به File | Add Folder to Workspace…
بروید، PacktLibrary
را انتخاب کرده، و روی ADD کلیک کنید.
4.
در ترمینال این دستور را وارد
کنید: dotnet new classlib.
5.
فایل PacktLibrary.csproj را باز کنید. همانطور
که میبینید، طبق پیشفرض هدف (target) کتابخانه کلاس .NET 5 است، بنابراین فقط با
مجتمعهایی میتواند کار کند که با .NET 5 سازگار باشند.
6.
Framework هدف را طوری تغییر
دهید که از استاندارد .NET 2.0 پشتیبانی کند.
7.
فایل را ذخیره کرده و آن را
ببندید.
8.
در ترمینال با وارد کردن دستور
dotnet build، پروژه را کمپایل کنید.
روشهای خوب: برای اینکه در برنامههای خودتان از آخرین ویژگیهای C# و سکوهای .NET استفاده کنید، هدف آن را .NET 5 تنظیم کنید. برای اینکه از سکوهای .NET موروثی، مثل .NET Code، .NET Framework، و Xamarin پشتیبانی کنید، هدف کتابخانه کلاس خودتان را .NET 2.0 قرار دهید. |
|
کار بعدی
که باید انجام دهیم تعریف کلاسی است که نمایانگر یک شخص باشد:
1.
در EXPLORER
نام فایل Class1.cs را به Person.csتغییر دهید.
2.
روی Person.cs
کلیک کنید تا باز شود و نام کلاس را به Person تغییر دهید.
3.
نام فضایاسمی را به Packt.Shared
تغییر دهید.
روشهای خوب: ما به این دلیل این اسم را انتخاب میکنیم چون مهم است کلاسها در یک فضایاسمی قرار گیرند که از لحاظ منطقی نامگذاری مناسبی داشته باشند. بهتر است برای نامِ فضاهای اسمی از دامنه استفاده شود، مثل System.Numerics که برای گونههای عددی از آن استفاده میشود. ولی در برنامه فعلی ما، گونهها و کلاسهایی که میسازیم عبارتند از Person، BankAccount، WondersOfTheWorld، و آنها دامنه مشخص و مشترکی با یکدیگر ندارند. |
|
فایل شما باید مانند زیر باشد:
توجه کنید
که کلیدواژهpublic پیش از کلیدواژه
class آمده. به کلیدواژههایی مثل public، مُعرفِ دسترسی (access modifier) میگویند، و آنها چگونگی دسترسی به کلاس تعریف شده را از داخل برنامههای دیگر مشخص
میکند.
اگر شما
پیش از class، بطور صریح public را ذکر نکنید، آنگاه این کلاس تنها از درون مجتمعی
(assembly)
که در آن تعریف شده قابل دسترس خواهد بود. دلیل آن هم این است که بطور پیشفرض
مُعرفِ دسترسی یک کلاس internal است. ولی چون ما نیاز داریم این کلاس خارج از مجتمع
خودش قابل دسترس باشد، باید صریحاً مُعرفِ دسترسی آن را public
ذکر کنیم.
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
در این فصل
شما یادخواهید گرفت که با OOP چگونه از گونههای
موجود گونههای جدیدی را منشعب کنید. شما تعریف عملگرها، ایجاد توابع محلی برای
انجام کارهای ساده، و تعریف نمایندهها و رویدادها برای تبادل پیام میان گونهها
را یاد خواهید گرفت. شما یادخواهید گرفت که چگونه برای عملکردهای معمول، رابطهایی
(اینترفیس) را پیادهسازی کنید. شما گونههای عمومی یا عام (یا جنریک) و تفاوت
میان گونههای مقداری و ارجاعی را یاد خواهید گرفت. شما یادخواهید گرفت که چگونه
از یک کلاس پایه ارثبری کنید، و چگونه از چندشکلی استفاده کنید. نهایتا شما یاد
خواهید گرفت که چگونه متدهای توسعه ایجاد کنید، و چگونه در یک سلسهمراتب ارثبری،
کلاسها را به یکدیگر تبدیل کنید.
این فصل
موضوعات زیر را پوشش میدهد:
·
تشکیل یک کتابخانه کلاس و
برنامه کنسولی.
·
ساده کردن متدها.
·
تولید رویدادها و رسیدگی به
آنها.
·
پیادهسازی رابطها (اینترفیسها).
·
تولید گونههایی که قابلیت
استفاده مجدد بیشتری داشته باشند با استفاده از گونههای عام.
·
مدیریت حافظه با استفاده از
گونههای ارجاعی و مقداری.
·
ارث بری از کلاسها.
·
تبدیل گونه در درون سلسلهمراتب
وراثت.
·
ارثبری و گسترش گونههای .NET
شبیه آنچه
در فصل 5
انجام دادیم، ما کار خودمان را با تعریف یک فضایکاری شروع میکنیم که شامل دو پروژه
است. اگر شما همه تمرینهای آن فصل را تکمیل کرده باشید، در اینصورت میتوانید
فضایکاری Chapter05
را باز کرده و کار با پروژههای آن را ادامه دهید.
در غیر
این صورت، دستورات زیر را دنبال کنید:
1.
در فولدر موجود Code، فولدری بنام Chapter06 با دو زیرفولدر ایجاد
کنید، یکی بنام PacktLibrary
و دیگر بنام PeopleApp.
·
Chapter06
·
PacktLibrary
· PeopleApp
2. برنامه VSC را اجراء کنید.
3. به File | Save
As Workspace…
بروید و نام Chapter06 را وارد کرده
و روی Save
کلیک کنید.
4.
به File | Add Folder to Workspace…
بروید، فولدر PacktLibrary
را انتخاب کرده و روی Add
کلیک کنید.
5.
به File | Add Folder to Workspace…
بروید، فولدر PeopleApp را انتخاب کرده و روی Add
کلیک کنید.
6.
به Terminal | New Terminal بروید و PacktLibraryرا انتخاب کنید.
7.
در
ترمینال دستور زیر را وارد کنید:
8.
به Terminal | New Terminal بروید و PeopleApp را انتخاب کنید.
9.
در
ترمینال دستور زیر را وارد کنید:
10. در EXPLORER در PacktLibrary، نام فایل Class1.cs را به Person.cs
تغییر دهید.
11. محتوای فایل را بصورت زیر تغییر دهید:
12. در EXPLORER فولدری بنام PeopleApp را گسترش دهید
و روی فایل PeopleApp.csproj کلیک
کنید.
13. یک ارجاع پروژه به PacktLibrary را اضافه کنید:
14. برای فولدر PeopleApp ،
در پنجره ترمینال دستور dotnet build را وارد کنید.
15. به کلاس Person عباراتی را اضافه کنید تا سه فیلد و یک متد را تعریف کنید:
ممکن است
ما بخواهیم دو نمونه از Person بتوانند تولیدِ مثل
کنند. ما میتوانیم اینکار را با استفاده از متدها انجام دهیم. متدهایِ نمونهای (Instance methods)
کارهایی هستند که یک شیء روی خودش انجام میدهد؛ متدهایِ ایستا کارهایی هستند که
کلاس انجام میدهد.
اینکه شما از کدامیک از اینها استفاده کنید، بیشتر
به کار مورد نظر بستگی دارد.
روشهای خوب: داشتن هر دو متد ایستا و نمونهای برای انجام کارهای مشابه نیز معمول است. برای مثال، کلاس string برای مقایسه رشتهها، هم دارای یک متد ایستا بنام Compare و هم یک متد نمونهای بنام CompareTo است. انتخاب میان این دو به نظر برنامهنویس بستگی دارد، تا انعطاف بیشتری به آنها بدهد. |
|
بیایید
کارمان را با انجام چند کار توسط متدها شروع کنیم:
1.
به کلاس Person
یک متد نمونهای و یک متد ایستا اضافه کنید، تا به به دو شیء از گونه Person اجازه دهد تولیدِ مثل کند:
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره رابطه میان فضاهای اسمی و مجتمعها (اسمبلیها)، و همچنین آن دسته از
کلیدواژههای C# است که به گونههای .NET مربوط هستند. شما
همچنین یادخواهید گرفت که چگونه برنامهها و کتابخانههایی که میسازید را بستهبندی
و منتشر کنید تا آنها در سکوهای متعدد قابل استفاده باشند. با چگونگی استفاده از
برنامههای و کتابخانههای قدیمی که برپایه .NET Framework موروثی ساخته شدهاند
و امکان انتقال آنها به .NET
جدید نیز آشنا میشوید.
در این
فصل موضوعات زیر پوشش داده خواهد شد:
·
مقدمهای بر .NET 5
·
کمپوننتهای .NET
·
انتشار برنامههای شما برای
استقرار (deployment)
بر روی کامپیوترهای کاربران
·
از کامپایل در آوردن (Decompiling) مجتمعها (اسمبلیها)
·
بستهبندی کتابخانههای شما
برای توزیع NuGet
·
انتقال
برنامهها از .NET
Framework به .NET 5
این بخش
از کتاب به کارکرد APIهایی که کتابخانه کلاس پایه یا BCL[11] در .NET 5 فراهم آورده، و چگونگی
استفاده مجدد از برنامهها در تمام سکوهای مختلف با استفاده از استاندارد .NET مربوط است.
.NET Core 2.0 و بالاتر، از حداقل
استانداردهایی که .NET
Standard 2.0 لازم دارد پشتیبانی میکند. این مهم است، زیرا این نسخه بسیاری از APIهایی را فراهم
آورده که در .NET
Core غایب بودند. کتابخانههای و برنامههای با ارزشی که حاصل 15 سال
کار برنامهنویسان .NET Framework بود، حالا برای انتقال به .NET آماده شدهاند و میتوان
آنها را علاوه بر ویندوز، در سیستمعاملهای مختلفی مثل مکاواس و لینوکس نیز
بکار گرفت.
.NET
Standard 2.1 بیش از سه هزار API جدید اضافه کرد. برخی از آن APIها به تغییرات اساسی نیاز داشت که موجب
ازبین رفتن سازگاری میشد، بنابراین آخرین نسخه .NET Framework
که نسخه 4.8 است، تنها .NET
Standard 2.0 را پیادهسازی کرد، و نه نسخه 2.1 را. .NET Core 3.0 ، Xamarin، Mono، و Unity نسخه .NET Standard 2.1
را پیادهسازی کردند.
اطلاعات بیشتر: لیست کامل APIهای .NET Standard 2.1 و مقایسه آنها با .NET Standard 2.0 در این صفحه مستند شده است. |
|
اگر همه پروژههای شما بتوانند از .NET 5 استفاده کند، نیاز به .NET Standard
ندارند. بدلیل اینکه ممکن است شما برای پروژههای موروثی .NET Framework،
یا برای برنامههای موبایل Xamarin، هنوز
نیاز داشته باشید کتابخانههای کلاس ایجاد کنید، هنوز نیاز است که کتابخانههای
کلاس .NET
Standard 2.0 و 2.1 ایجاد شوند. هنگامی که .NET 6 در نوامبر سال 2021 بیرون بیآید،
آنگاه نیاز به .NET
Standard باز هم کمتر میشود.
اطلاعات بیشتر: برای اطلاع از آینده .NET Standard به این آدرس رجوع کنید. |
|
برای اینکه پیشرفت .NET را در پنج سال گذشته خلاصه
کنم، من نسخههای عمده .NET
Core و نسخههای جدید .NET را با نسخههای قدیمی .NET Framework مقایسه کردهام.
·
.NET Core 1.0:
در مقایسه با.NET
Framework 4.6.1، که نسخه جاری چهارچوب نت در سال 2016 بود، دارای APIهای کمتری بود.
·
.NET Core 2.0:
از لحاظ تعداد APIها با .NET Framework
4.7.1 برابری میکرد، زیرا هر دو آنها .NET Standard 2.0
را پیادهسازی کرده بودند.
·
.NET Core 3.0:
در مقایسه با NET Framework 4.8. دارای APIهای بیشتری بود،
زیرا آخرین نسخه چهارچوب نت (یعنی نسخه 4.8) .NET Standard 2.1 را پیادهسازی نکرده.
·
.NET 5:
در مقایسه با NET Framework 4.8. حتی APIهای بیشتری دارد،
که کارآیی و سرعت آنها نیز بهبود یافته.
اطلاعات بیشتر: برای جستجو و مشاهده کلیه APIهای .NET، شما میتوانید به این آدرس مراجعه کنید. |
|
.NET Core 1.0
در ماه ژوئن سال 2016 بیرون آمد و تمرکز آن برروی APIهایی بود که برای ساختن برنامههای
چند-سکویی مناسب بود، از جمله برنامههای وب و کلاد، و سرویسهای برای لینوکس با
استفاده از ASP.NET Core.
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 1.0 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
.NET Core 1.1 در نوامبر سال 2016
بیرون آمد و تمرکز آن برروی رفع اشکلات قبلی، افزایش تعداد نسخههای لینوکس
پشتیبانی شده، پشتیبانی از .NET Standard 1.6، و بهبود سرعت، خصوصاً در ASP.NET
Core، برای برنامهها و سرویسهای وب بود.
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 1.1 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
.NET Core 2.0 در ماه آگوست سال 2017 بیرون آمد و تمرکز آن بر روی پیادهسازی .NET Standard 2.0،
رجوع به کتابخانههای .NET
Framework، و بهبود سرعت بیشتر بود.
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 2.0 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
ویرایش سوم این کتاب در ماه نوامبر سال 2017 منتشر
شد، بنابراین .NET
Core 2.0 و .NET Core برای برنامههای UWP[12] را پوشش میداد.
.NET Core 2.1 در ماه می سال 2018
بیرون آمد و تمرکز آن بر روی سیستم ابزاری قابل گسترش، اضافه کردن گونههای جدیدی
مثل Span<T>، APIهای جدید برای رمزنگاری
و فشردهسازی، یک بسته سازگاری ویندوز با بیش از 20000 API
برای کمک به انتقال برنامههای قدیمی ویندوز، تبدیل مقادیر Entity Framework
Core، تبدیلهای LINQ GroupBy، کاشتن دادهها (data seeding)، پرس و جوی گونهها، و افزایش کارآیی
بیشتر، و همچنین موضوعات زیر:
ویژگی |
فصل |
موضوع |
Spans, indexes, ranges |
8 |
کار با محدودهها، ایندکسها، و بردها |
Brotli compression |
9 |
فشردهسازی با الگوریتم بروتلی |
Cryptography |
10 |
موارد جدید در رمزنگاری |
Lazy loading |
11 |
فعال کردن بارگذاری غیر-همزمان |
Data seeding |
11 |
کاشت دادهها |
.NET Core 2.2 در ماه دسامبر سال
2018 بیرون آمد و تمرکز آن بر روی بهبودهای تشخیصی برای حیناجراء، کامپایل کردن
ردیفی اختیاری (tiered compilation)، و اضافه کردن خصوصیات جدید
به ASP.NET Core و Entity Framework Core، مانند پشتیبانی از
دادههای مکانی با استفاده از کتابخانه NetTopologySuite، تگهای پرس و جو، و گردایههای
نهادهای صاحب شده.
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 2.2 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
.NET Core 3.0 در سپتامبر سال 2019 بیرون
آمد و تمرکز آن بر روی ساختن برنامههای دسکتاپ ویندوزی با استفاده از Windows Form، Windows Presentation،
و Entity Framework 6.3، یک JSON خوان سریع، دسترسی به پورت سریال، و دیگر دسترسیهای PIN برای اینترنت اشیاء
(IoT)،
و همچنین موضوعاتی که در جدول زیر ذکر شده، بود.
ویژگی |
فصل |
توضیح |
برنامههای حاوی .NET |
7 |
انتشار برنامهها برای نصب روی کامپیوتر کاربر |
ایندکسها و بردها |
8 |
کار با محدودهها، ایندکسها، و بردها |
System.Text.Json |
9 |
پردازشها سریع JSON |
جریانهای ناهنگام |
13 |
کار با جریانهای ناهنگام |
ویرایش چهارم
این کتاب در اکتبر سال 2019 منتشر شد، بنابراین مطالب فوق در آن پوشش داده شده
بود.
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 3.0 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
.NET
5.0 در نوامبر سال 2020 منتشر شد و تمرکز آن بر روی متحد کردن سکوهای
مختلف .NET،
تصفیه کردن سکو، و بهبود کارآیی و سرعت، و از جمله موضوعات زیر بود:
ویژگی |
فصل |
توضیح |
گونههای نیمه (Half type) |
8 |
کار با اعداد جدید |
بهبود سرعت عبارات باقاعده |
8 |
سرعت عبارات باقاعده بهبود یافته |
بهبودها در System.Text.Json |
9 |
پردازشها سریع JSON |
Filtered Include |
11 |
فیلتر کردن نهادهای شامل شده |
Scaffold-DbContext
|
11 |
مدلهای داربستی با استفاده از یک پایگاه داده موجود |
اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET 5.0 توسط مایکروسافت، میتوانید به این آدرس رجوع کنید. |
|
در طی چند سال گذشته مایکروسافت سرعت .NET را خیلی بهبود داده.
اطلاعات بیشتر: برای اطلاع از این موضوع میتوانید به این وبلاگ رجوع کنید. |
|
برای
ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF
آن را تهیه فرمایید.
این فصل
درباره برخی از گونههای معمول در .NET است. اینها شامل گونههایی برای کار با
اعداد، متنها، گردایهها، دسترسی به شبکه، انعکاس، و صفتها هستند. همچنین کار با
محدودهها، ایندکسها، بردها، و بینالمللیسازی را توضیح خواهیم داد.
این فصل
موضوعات زیر را پوشش میدهد:
·
کار با اعداد
·
کار با متنها
·
تطبیق الگو با عبارات باقاعده
·
ذخیره چند شیء در گردایهها
·
کار با محدودهها، ایندکسها،
و بردها
·
کار با منابع شبکه
·
کار با صفتها
·
کار با تصاویر
·
بینالمللیسازی برنامهها
اعداد یکی
از متداولترین گونهها هستند. متداولترین گونههای .NET برای کار با اعداد اینها
هستند:
فضایاسمی |
نمونه (گونهها) |
توضیح |
System |
SByte, Int16, Int32, Int64 |
اعداد صحیح: یعنی صفر و اعداد صحیح مثبت و منفی. |
System |
Byte, UInt16, UInt32, UInt64 |
اعداد شمارشی : یعنی صفر و اعداد صحیح مثبت |
System |
Half, Single, Double |
اعداد حقیقی: یعنی اعداد اعشاری (ممیز شناور). |
System |
Decimal |
اعداد حقیقی دقیق: یعنی اعدادی که میتوان از آنها در کارهای علمی، مهندسی، و مالی استفاده کرد. |
System .Numerics |
BigInteger, Complex, Quaternion |
اعداد صحیح بزرگ، اعداد مختلط، و کواترنیونها (چهارگانها). |
اطلاعات بیشتر: برای کسب اطلاعات بیشتر درباره این موضوع، شما میتوانید به این آدرس رجوع کنید. |
|
از زمان که .NET Framework
1.0 بیرون آمد، .NET دارای دو گونه اعشاری float 32-بیتی و double 64-بیتی است.
استاندارد IEEE 754 نیز یک عدد ممیز
شناور 16-بیتی را تعریف کرده. در برخی از الگوریتمها، از جمله الگوریتمهای یادگیری ماشینی (Machine learning)، از این نوع اعدادِ
دقتِ-پایین، که به اعداد نِصفه (Half number) معروفند، استفاده میکنند.
بنابراین مایکروسافت گونه System.Half را به .NET 5 اضافه کرد.
فعلاً زبان C#
نام مستعار half را برای اعداد
مذکور تعریف نکرده، بنابراین در صورت نیاز باید از نام کامل آنها، یعنی System.Half
، استفاده شود. البته ممکن است در آینده یک نام مستعار برای آنها
تعریف شود.
اطلاعات بیشتر: برای اطلاعات بیشتر درمورد اعداد نصفه به این آدرس رجوع کنید. |
|
بزرگترین
عدد صحیحی که میتواند در یک گونه .NET ذخیره شود، و در زبان C#
دارای یک نام مستعار است، حدود 18 میلیارد میلیارد است، که در یک گونه unsigned long ذخیره میشود. ولی اگر
بخواهید از اعداد بزرگتری استفاده کنید تکلیف چیست؟ بیایید با هم اعداد را بیشتر
بررسی کنیم.:
2.
در فولدری بنام Chapter08، یک برنامه کنسولی جدید به نام WorkingWithNumbers
را ایجاد کنید.
3.
فضای کاری را بعنوان Chapter08 ذخیره کرده و WorkingWithNumbers
را به آن اضافه کنید.
4.
در فایل Program.cs
عبارتی را اضافه کنید کردن فضایاسمی System.Numerics را وارد کند:
5.
در متد Main،
عباراتی را وارد کنید تا بزرگترین مقدار گونه ulong،
و همچنین یک عدد صحیح بزرگ 30 رقمی را نشان دهد:
عدد 40 که در کد فرمت آمده به معنی این است که به اندازه 40 حرف از سمت راست تراز
شود، بنابراین هر دو عدد چاپ شده از سمت راست با هم در یک تراز قرار میگیرند. N0 یعنی از جداکنندههای سهتایی
و بدون اعشاری استفاده شود.
6.
برنامه را اجراء کرده و نتیجه
را مشاهده کنید:
یک عدد مختلط میتواند بصورت a + bi بیان شود، که a و b اعداد حقیقی هستند، و i یکای موهومی است، که در معادله i2=-1 صدق میکند. اگر قسمت حقیقی a صفر باشد، این عدد یک عدد موهومی خالص است، و اگر قسمت موهومی b صفر باشد، این یک عدد حقیقی است.
اعداد
مختلط در بسیاری از حوزهها، از جمله در علوم، تکنولوژی، مهندسی، و ریاضیات کاربرد
دارند. بعلاوه جمع آنها بصورت جمع جداگانه اجزاء حقیقی و موهومی انجام میشود:
بیایید
اعداد مختلط را بیشتر بررسی کنیم:
1.
در متد Main
عباراتی را وارد کنید که دو عدد مختلط را با هم جمع کند:
2.
برنامه کنسولی را اجراء کرده و
نتیجه را مشاهده کنید:
اعداد چهارگان یا کواترنیونها
(Quaternions)
یک دستگاه عددی هستند که اعداد مختلط را گسترش میدهند. آنها یک جبر شرکتپذیری
تقسیمِ نُرمدار چهار-بعدی را بر روی اعداد حقیقی تشکیل میدهند.
اوف! باور
کنید خود من هم از تعریف بالا چیز زیادی نمیفهمم. بنابراین نگران نباشید، ما
برنامهای برای استفاده از آنها نخواهیم داشت. تنها چیزی که لازم است بگویم این
است که آنها در توصیف چرخشهای فضایی خوب عمل میکنند، بنابراین در هسته اصلی بازیها،
و بسیاری دیگر از شبیهسازهای پرواز و سیستمهای کنترلی، از آنها استفاده میشود.
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره خواندن و نوشتن فایلها و جریانها، به رمز درآوردن متنها، و سریالسازی
است. ما در بخشهای بعدی موضوعات زیر را پوشش میدهیم:
·
سیستمفایلی
(Filesystem).
·
خواندن و نوشتن با جریانها (streams).
·
به
رمز درآوردن (Encoding)
و از رمزدر آوردن (Decoding)
متنها.
·
سریالسازی (Serializing) اشیاء.
اغلب
برنامههای شما نیاز دارند تا عملیات ورودی و خروجی را بر روی فایلها و دایرکتوریها
انجام دهند. فضاهای اسمی System
و System.IO حاوی کلاسهایی برای
این منظور هستند.
بیایید
ببینیم در محیطهای مختلف مثل ویندوز، لینوکس، و مکاواس چگونه میتوانیم از
سیستمفایلی استفاده کنیم:
1.
در فولدر جدیدی بنام Chapter09،
یک پروژه کنسولی جدید بنام WorkingWithFileSystems ایجاد کنید.
2.
فضای کاری را بعنوان Chapter09
ذخیره کرده و WorkingWithFileSystems را به آن
اضافه کنید.
3.
فضایاسمی System.IO را وارد کرده، و همچنین گونههای System.Console، System.IO.Directory، System.Environment، و System.IO.Path را بصورت ایستا وارد کنید:
در سیستمهای
ویندوز، لینوکس، و مکاواس، مسیرها با یکدیگر متفاوتند، بنابراین ما کارمان را با
این شروع میکنیم که .NET
چگونه به این رسیدگی میکند.
4.
یک متد ایستا بنام OutputFileSystemInfo ایجاد کنید، و
عباراتی را در آن وارد کنید تا موارد زیر را انجام دهد:
· حرف جداکننده مسیر و دایرکتوری را چاپ کند.
· مسیر دایرکتوری جاری را چاپ کند.
·
برخی از مسیرهای خاص، مانند
مسیر فایلهای سیستم، فایلهای موقتی (temporary files)، و مستندات (documents)
را چاپ کند.
گونه Environment خیلی از اعضای مفید
دیگر نیز دارد، از جمله متدِ GetEnvironmentVariables
و ویژگیهای OSVersion و
ProcessorCount.
5.
در متد Main،
متد OutputFileSystemInfo را فراخوانی کنید:
6.
برنامه کنسولی را اجراء کرده و
نتایج آن را مشاهده کنید:
شکل 9.1: اطلاعات مربوط به سیستمفایلی، پس از اجراء
برنامه.
در ویندوز از حرف بکاسلش (\) برای جداسازی دایرکتوریها استفاده میشود. ولی در مکاواس و لینوکس از اسلش
استفاده میشود (/).
برای کار
با درایوها (drives)،
از کلاس DriveInfo استفاده کنید، این کلاس دارای یک
متد ایستا است که اطلاعاتی درباره کلیه درایوهایی که به کامپیوتر شما متصل
هستند را باز میگرداند. هر درایو دارای یک ’گونهِ درایو‘ است. برای این منظور
مراحل زیر را دنبال کنید:
1.
متدی بنام WorkWithDrives ایجاد کرده و عباراتی
را در آن بنویسید که کلیه درایوهای کامپیوتر را گرفته و نام، نوع، اندازه، فضای
خالی، و فرمت آنها را نشان دهد، ولی فقط در صورتی این اطلاعات را نشان دهد که
درایو در حالت آماده بکار (ready) باشد:
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره بکارگیری رمزگذاری (encryption)
برای محافظت از دادهها است تا از مشاهده آنها توسط کاربرانی که سوء نیت دارند
جلوگیری کند. ما همچنین استفاده از درهمسازی
(hashing)
و امضاء (signing) را برای جلوگیری از
تغییر دادهها توضیح خواهیم داد.
مایکروسافت
در .NET Core 2.1،
API رمزگزاری بر پایه Span<T> را معرفی کرد، تا از آن برای درهمسازی، تولید اعداد
تصادفی، تولید و پردازش ناهمزمانِ امضاء استفاده شود.
عملیات رمزنگاری توسط توابعی انجام میشوند که در
سیستمعامل پیادهسازی شدهاند، بنابراین وقتی یک آسیبپذیری در سطح سیستمعامل
اصلاح میشود، برنامههای .NET فوراً از آن بهره میبرند. ولی این یعنی فقط آن دسته از
برنامههای .NET
میتوانند از ویژگیهایی استفاده کنند که سیستمعامل از آنها پشتیبانی کند.
اطلاعات بیشتر: برای اطلاع از اینکه هر یک از سیستمعاملها از چه ویژگیهای رمزنگاری پشتیبانی میکنند به این آدرس رجوع کنید. |
|
در این فصل موضوعات زیر پوشش داده میشود:
·
فرهنگِ اصطلاحاتِ حفاظت از
دادهها.
·
رمزگذاری و از رمز درآوردن
دادهها.
·
درهم سازی دادهها.
·
امضاء کردن دادهها.
·
تولید اعداد تصادفی.
·
ویژگیها جدید مربوط به
رمزنگاری در .NET
·
اعتبارسنجی و مجوز سنجی
کاربران.
تکنیکهای
زیادی برای محافظت از دادهها وجود دارند، که در زیر توضیحات مختصری درمورد شش تا
از پرطرفدارترین آنها آمده، و ما آنها را با جزئیات بیشتری در بخشهای بعدی این
فصل مرور خواهیم کرد:
·
به
رمزدرآوردن (Encryption)
و از رمزدرآوردن (Decryption):
یک روند دو-طرفه برای تبدیل دادههای شما وجود دارد، که در یکی از آنها متنهای
عادی به رمز در میآیند، و در دیگری متنهای رمزی از رمز درمیآیند و به متون عادی
تبدیل میشوند.
·
درهمسازیها (Hashes): این یک روند یک-طرفه برای تولید یک مقدار درهم (hash value)
است تا از آن برای ذخیره امنِ گذرواژهها (passwords)
استفاده شود، یا خرابی (corruption)
و تغییرات بدخواهانه در دادهها را پیدا کرد.
·
امضاهای
دیجیتال (Signatures): از این تکنیک هنگامی استفاده میشود که بخواهیم
اطمینان یابیم که دادهها از طرف کسی میآیند که هویت آن توسط یک امضاء (دیجیتالِ)
معتبر تایید شده باشد.
·
اعتبارسنجی (Authentication): از این تکنیک
هنگامی استفاده میشود که بخواهیم هویت (identify) یک نفر را با بررسی اعتبارات (credentials) او تعیین کنیم.
·
مجوز
سنجی (Authorization): از این تکنیک هنگامی استفاده میشود که
بخواهیم مطمئن شویم آیا کاربر مجوزهای (permission)
لازم برای انجام یک عمل، یا کار با یک داده بخصوصی را دارد یا نه. اینکار با بررسی
این صورت میگیرد که کاربر به چه گروههایی تعلق دارد و آنها چه وظایفی (roles) دارند.
روشهای خوب: اگر امنیت برای شما اهمیت دارد (که باید همینطور هم باشد!) بجای اینکه به توصیههایی که روی سایتهای اینترنتی مطرح میشوند اتکا کنید، برای مشاوره یک متخصص امنیتی را استخدام کنید. خیلی ساده میتوان یک اشتباه کوچک را مرتکب شد، و در اینصورت برنامهها و دادههای شما آسیبپذیر خواهند شد، و شما وقتی متوجه آن میشوید که دیگر خیلی دیر شده! |
|
الگوریتمهای محافظت کننده غالباً از یک کلید (key) استفاده میکنند.
کلیدها بصورت آرایههای بایتی با اندازههای متفاوت نشان داده میشوند.
روشهای خوب: برای داشتن حفاظت بهتر، از کلیدی استفاده کنید که اندازه آن بزرگتر است. |
|
کلیدها میتوانند متقارن (symmetric)
یا نامتقارن (asymmetric)
باشند. در کلیدهای متقارن، برای رمزگذاری و از رمزدرآوردن از یک کلید استفاده میشود.
در کلیدهای نامتقارن برای رمزگذاری از یک کلید (که کلید
عمومی نامیده میشود)، و برای از رمزدرآوردن از کلید دیگری (که کلید خصوصی نامیده میشود) استفاده میشود.
روشهای خوب: الگوریتمهای رمزنگاری کلید-متقارن سریع هستند و توسط یک جریان میتوانند حجم زیادی از دادهها را به رمز درآورند. الگوریتمهای کلید-نامتقارن کُند هستند و تنها میتوانند آرایههای بایتی کوچکی را به رمز درآورند. |
|
اگر میخواهید مزیتهای هر دو روش متقارن و نامتقارن
را یکجا با هم داشته باشید، ابتدا دادههای اصلی خودتان را توسط یک کلید متقارن به
رمز درآورید، و سپس برای اشتراک آن کلیدِ متقارن، از یک کلید نامتقارن استفاده
کنید. لایه سوکت امن (SSL)[13] در اینترنت به همین روش کار میکند.
کلیدها به شکل آرایههای بایتی هستند که اندازههای
متفاوتی دارند.
هنگامی که حجم زیادی از دادهها به رمز درآورده میشوند،
احتمال دارد در آنها دنبالههای تکراری وجود داشته باشد. برای مثال، در یک سند به
زبان انگلیسی، لغت the مکرراً تکرار میشود،
و هربار که به رمز درآورده شود، ممکن است مثلاً به شکل hQ2 ظاهر شود. همانطور که
در زیر نشان داده شده، یک هکر خوب میتواند برای پیدا کردن کلید رمزگذاری از این
مورد استفاده کند:
ما میتوانیم با تقسیم دادهها به بلوکها (blocks) از ظهور دنبالههای
تکراری جلوگیری کنیم. بعد از رمز گذاری یک بلوک، بر اساس آن بلوک یک آرایه بایتی
تولید میشود، و به بلوک بعدی خورانده میشود تا الگوریتم را طوری تغییر دهد که
بلوک بعدی به شکل قبلی به رمز درنیاید. برای از رمز درآوردن اولین بلوک، ما باید
به آن یک آرایه بایتی بخورانیم. این آرایه بردار اولیه
(Initialization
Vector یا IV)
نامیده میشود.
روشهای خوب: برای رمزگذاری بهتر از بلوکهایی با اندازه کوچک استفاده کنید. |
|
یک چاشنی (Salts) یک آرایه بایتیِ
تصادفی است که از آن بعنوان یک ورودی اضافی در یک تابع درهم یک-طرفه استفاده میشود.
اگر هنگام تولید درهم از یک چاشنی استفاده نکنید، در اینصورت اگر کاربران شما 123456 را بعنوان گذرواژه
خودشان انتخاب کنند (بله، هنوز هم 8% کاربران در سال 2016 اینکار را میکنند)، آنگاه مقدار
درهم آنها یکسان خواهد بود، و حساب کاربری آنها دربرابر یک حمله دیکشنری (Dictionary Attack) آسیبپذیر خواهد
بود.
اطلاعات بیشتر: شما با مراجعه به این آدرس میتوانید اطلاعات بیشتری را درباره حملات دیکشنری 101 کسب کنید. |
|
برای ادامه مطالعه این فصل،
با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این فصل
درباره خواندن و نوشتن پایگاههای داده، نظیر Microsoft SQL Server، SQLite، و Azure Cosmos DB است. اینکارها توسط
یک تکنولوژی نگاشتِ شیء-به-داده، به نام Entity Framework
Core یا EF Core صورت
میگیرد.
در این
فصل ما موارد زیر را پوشش خواهیم داد:
·
پایگاههای داده نوین
·
برپاسازی EF Core
·
تعریف مدلهای EF Core
·
پرس و جو از مدلهای EF Core
·
بارگذاری الگوها با EF Core
·
تغییر دادهها با EF Core
دو دسته
از پایگاههای داده پرکاربرد عبارتند از سامانه مدیریت
پایگاه داده رابطهای یا RDMS[14] و پایگاههای داده NoSQL.
نمونهای از پایگاههایی که به دسته اول تعلق دارند عبارتند از Microsoft SQL Server، PostgreSQL،
MySQL، و SQLite
و نمونههایی از دسته دوم؛ Microsoft Azure Cosmos DB، Redis، MongoDB، Apache Cassandra.
تمرکز این
فصل بر روی پایگاههای رابطهای مثل SQL Server و SQLite خواهد بود. اگر تمایل دارید درباره پایگاههای داده NoSQL، مثل Cosmos DB و MongoDB و چگونگی استفاده از
آنها در EF Core بیشتر یاد
بگیرید، پیشنهاد میکنم به آدرسهای زیر رجوع کنید:
•
Welcome to Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/introduction
• Use NoSQL databases as a persistence infrastructure: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs- patterns/nosql-database-persistence-infrastructure
Entity Framework یا (EF) ابتدا در سال 2008 بعنوان بخشی از .NET Framework 3.5
بیرون آمد. مایکروسافت متوجه شد برنامهنویسان به ابزارهای نگاشت شیء-رابطه یا ORM[15] خیلی علاقه دارند، و از همان زمان نیز EF درحال
دگرگونی بوده.
شکل
11.1: جدولهای پایگاه Northwind به همراه رابطههای آن.
برای
ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این
فصل درباره زبان پرسجوی یکپارچه، یا به
اختصار LINQ[16]، است. لینک
عبارت است از یک سری گسترشهای زبان، که برنامهنویس را قادر میکند با دنبالهای از
اقلام کار کند، و سپس آنها را فیلتر و مرتب کرده، نتیجه را بصورت خروجیهای مختلف
ارائه کند.
ما
در این فصل موضوعات زیر را پوشش خواهیم داد:
·
کار با مجموعهها با استفاده از LINQ
·
شیرین کردن نحوِ LINQ با شِکَر نحوی
·
استفاده از چندین ریسه در LINQ موازی
LINQ چندین بخش دارد، که برخی از آنها لازم، و برخی نیز
اختیاری هستند:
·
متدهای گسترش (لازم). اینها شامل Where، OrderBy، و Select میشوند.
·
نحو ساختِ پرسوجوی لینک[17] (اختیاری): اینها شامل from، in، where، orderby، descending و select هستند. اینها
کلیدواژههای C# هستند که نام مستعاری برای برخی از متدهای گسترش LINQ
هستند، و استفاده از آنها میتواند نوشتن پرسوجوها را آسانتر کند، خصوصاً هنگامی
که شما از قبل با زبانهای پرسوجوی دیگری مثل SQL آشنایی دارید.
Enumerable بیش از 45 متد گسترش را تعریف
کرده که در جدول زیر خلاصه شدهاند:
برای
ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
این
فصل موضوعات زیر را پوشش میدهد:
·
همزمانسازی دسترسی به منابع مشترک
شکل
13.1: کلاس Thread و دیگر گونههای مرتبط.
برای
ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
مایکروسافت
سکوهای ساخت برنامه را مدلهای برنامه (App Models) نامگذاری
کرده.
این
فصل موارد زیر را پوشش میدهد:
·
مدلهای برنامه برای C# و .NET
·
خصوصیات جدید در ASP.NET Core
·
ساخت یک مدل موجودیت داده برای Northwind
ASP.NET Core تکنولوژیهای متعددی برای ساختن وبسایتها فراهم
آورده:
بیشتر
وبسایتها محتوای زیادی دارند، و اگر قرار باشد که هرباری که این محتوا تغییر میکند
برنامهنویسان درگیر آن باشند، این مقیاسپذیری خوبی نخواهد داشت. یک سیستم مدیریت محتوا (CMS[18]) برنامهنویسان را قادر
میکند تا با تعریف ساختار محتوا و یک سری الگوها، ثبات و سازگاری وبسایت را
فراهم آورند. این باعث میشود مالک محتوا (صاحت وبسایت)، که یک فرد غیر-متخصص
است، به آسانی بتواند مدیریت محتوای خودش را به دست بگیرد. آنها میتوانند صفحات
جدیدی را ایجاد کرده، و محتوای موجود را آپدیت کنند.
برای ادامه مطالعه
این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.
در
این فصل موضوعات زیر پوشش داده خواهند شد:
·
استفاده از Entity Framework Core با ASP.NET Core
·
استفاده از کتابخانههای کلاس Razor
·
پیکربندی سرویسها و لولهکشی درخواست HTTP
برنامهنویسی
وب با استفاده از HTTP[19] صورت میگیرد.
سرویسگیرنده
برای منبعی که به آن نیاز دارد، و معمولاً یک صفحه وب است، یک درخواست HTTP را به سرویسدهنده میفرستد. این درخواست به
شکل یک URL[20]
فرستاده میشود، و در جواب نیز سرویسدهنده یک پاسخ HTTP میفرستد:
شکل
15.1: یک درخواست و پاسخ HTTP.
شما
میتوانید از Google
Chrome یا مرورگرهای دیگر برای
ثبت درخواستها و پاسخها استفاده کنید.
بیایید
با استفاده از کروم چند درخواست HTTP را انجام دهیم:
1.
Google Chrome
را اجراء کنید.
2.
برای مشاهده ابزارهای برنامهنویسی،
دکمه F12 را فشار دهید.
شکل
15.2: کروم درحال ثبت ترافیک شبکه است
4.
در محل وارد کردن آدرس کروم، URL زیر را وارد کنید:
https://dotnet.microsoft.com/learn/aspnet
شکل
15.3: درخواستهای ثبتشده.
برای
ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.