آموزش ساخت کتابخانه در سی شارپ
Class Library در سی شارپ
Class Library متدهایی که توسط برنامهها فراخوانی میگردد، را تعریف میکند. این کتابخانهها به خودی خود اجرا نمیشوند بلکه در برنامههای دیگر مورد استفاده قرار میگیرند. Class Library که در فریم ورک .NET با استاندارد 2.0 کار میکند. در ادامه با مراحل ساخت کتابخانه در سی شارپ آشنا خواهید شد.
هر برنامهای که از آن استاندارد پشتیبانی میکند، میتواند کتابخانه شما را فراخوانی کند. در این بخش قصد داریم نحوه ساخت کتابخانه در سی شارپ را به شما آموزش دهیم.
برای این کار از متد string-handling استفاده خواهیم کرد. این کتابخانه به صورت یک افزونه پیاده سازی شده و میتوانید آن را مثل یک کتابخانه رشتهای فراخوانی کنید. برای ساخت این کلاس از نرم افزار Visual studio کمک خواهیم گرفت.
مراحل ساخت Class Library در سی شارپ
ایجاد Solution: اولین مرحله ساخت کتابخانه در سی شارپ، ایجاد Solution است. پس از اینکه Solution خالی ایجاد شد، پروژه کتابخانه را در داخل آن ایجاد خواهیم کرد. در برنامه ویژوال استودیو، هر Solution مثل یک قالب عمل کرده و میتواند چندین پروژه را در داخل خود جای دهد. برای ایجاد Solution خالی در ویژوال استودیو، پس از باز شدن برنامه Create a new project را انتخاب کنید.
در پنل Create a new project و در قسمت جستجو کلمه Solution را تایپ کنید. از میان گزینههای موجود Blank Solution را انتخاب کرده و Next را بزنید.
در صفحه Configure your new project، در قسمت مقابل Project name نامی برای پروژه خود انتخاب کنید (مثلا ClassLibraryProjects)، سپس دکمه Create را بزنید.
در مرحله بعدی باید یک کلاس استاندارد C# .NET با نام StringLibrary را به Solution اضافه کنیم.
برای این کار بر روی Solution در قسمت Solution Explorer کلیک کرده و از قسمت Add، New project را انتخاب میکنیم. در قسمت جستجوی پنجره Add a new project، Library را وارد کنید. برای سهولت کار در قسمت فیلتر ها، C# را انتخاب کنید. سپس از لیست Platforms، گزینه All Platforms را انتخاب کنید. سپسclass Library (.Net Standard) را انتخاب کرده next را بزنید.
پنل Solution Explorer
در ادامه کار، در پنل Solution Explorer بر روی StringLibrary راست کلیک کرده و Properties را بزنید. در پنجره باز شده، قسمت Target Framework را بررسی کنید تا حتما روی .Net Standard 2.0 قرار داشته باشد. با ساخت کتابخانه در سی شارپ از این طریق میتوانید آن را روی هر پلتفرمی که از این استاندارد پشتیبانی میکند، اجرا کنید.
سپس کدهای زیر را به جای کدهای موجود در فایل قرار داده و فایل را ذخیره کنید:
using System;
namespace UtilityLibraries
{
public static class StringLibrary
{
public static bool StartsWithUpper(this String str)
{
if (String.IsNullOrWhiteSpace(str))
return false;
Char ch = str[0];
return Char.IsUpper(ch);
}
}
}
در Class Library فوق دستوری به نام StartsWithUpper وجود دارد. خروجی این متد یک مقدار بول می باشد. کار این متد این است که نشان دهد آیا نمونه ایجاد شده با حرف بزرگ شروع شده یا خیر. استاندارد Unicode میتواند حروف بزرگ و کوچک را تشخیص دهد. دستور Char.IsUpper(Char) در صورتی که کاراکتر با حرف بزرگ نوشته شده باشد، مقدار True را برگشت خواهد داد.
سپس در نوار منو، Build را انتخاب کرده و Build Solution را انتخاب کنید. در این مرحله باید پروژه بدون هیچ ایرادی کامپایل شود. این یعنی شما توانستهاید با موفقیت یک کتابخانه ایجاد کنید.
نحوه ایجاد و استفاده از DLL در سی شارپ
کتابخانه پیوند پویا که به طور اختصار به آن DLL گفته میشود، کتابخانه ای است که دستورات و توابع آن را میتوان در آن واحد، توسط چندین برنامه استفاده کرد. کتابخانه پیوند پویا در برنامههای زیادی قابل استفاده است. برای به کار گیری یک DLL در برنامه آن را ایمپورت کرده یا مرجع آن را به برنامه اضافه میکنیم. فایلهایی دارای پسوند DLL و exe، قابل اجرا هستند با این تفاوت که نمیتوان فایل های DLL را مستقیما اجرا کرد.
مراحل ایجاد DLL
ایجاد فایل DLL مثل ساخت کتابخانه در سی شارپ است. ابتدا برنامه ویژوال استودیو را باز کرده سپس New project را انتخاب کنید. در مرحله بعد Visual C# را انتخاب کرده و Class library را انتخاب کنید. سپس برای آن یک نام انتخاب کرده (از نام Calculation استفاده کنید) و Create را بزنید.
در پنل Solution Explorer نام پروژه Class1.cs را به Calculate.cs تغییر دهید.
در کلاس ایجاد شده دستورات زیر را بنویسید. این دستورات برای جمع و تفریق دو عدد integer طراحی شده است (به عنوان مثالی برای یادگیری).
namespace Calculation
{
public class calculate
{
public int add(int a, int b)
{
return a + b;
}
public int sub(int a, int b)
{
return a - b;
}
}
}
در این مرحله از نوار منو، Build و سپس Build solution را انتخاب کرده یا دکمه F6 را فشار دهید. پس از اتمام موفق فرایند، در محل ذخیره سازی پروژه، در داخل پوشه Bin و در داخل Debug فایل جدیدی با نام Calculation.dll ایجاد میشود.
حال اگر بخواهیم از این فایل در برنامه دیگری استفاده کنیم، به روش زیر عمل خواهیم کرد: برنامه ویژوال استودیو را باز کرده و یک پروژه جدید از نوع Visual C# و Windows Forms Application ایجاد کنید.
در قسمت فرم ها صفحه ای به شکل زیر ایجاد کنید:
سپس باید فایل DLL را به عنوان یک مرجع برای صفحه انتخاب کنید. برای این کار روی پروژه راست کلیک کرده و Add Reference را انتخاب کنید.
در پنجره باز شده فایل Calculation.DLL را انتخاب کرده و Add را بزنید. پس از این کار نام Calculation را در reference ها مشاهده خواهید کرد.
حال میتوانید از این کتابخانه استفاده کنید. برای این کار از دستور Using Calculation; استفاده کنید. حال میتوانید با اجرای برنامه نمونه زیر از صحت عملکرد کتابخانه خود اطمینان حاصل کنید.
1. using System;
2. using System.Collections.Generic;
3. using System.ComponentModel;
4. using System.Data;
5. using System.Drawing;
6. using System.Linq;
7. using System.Text;
8. using System.Windows.Forms;
9. using Calculation;
10.
11. namespace MiniCalculator
12. {
13. public partial class Form1 : Form
14. {
15.
16. public Form1()
17. {
18. InitializeComponent();
19. }
20. calculate cal = new calculate();
21. // اضافه کردن رویداد جمع برای کلیک کردن دکمه
22. private void button1_Click(object sender, EventArgs e)
23. {
24. try
25. {
26. //نتیجه حاصل را در متغییر ذخیره می کند
27. int i = cal.Add(int.Parse(txtFirstNo.Text), int.Parse(txtSecNo.Text));
28. txtResult.Text = i.ToString();
29. }
30.
31. catch (Exception ex)
32. {
33. MessageBox.Show(ex.Message);
34. }
35. }
36.
37. //رویداد کلیک برای تفریق کردن
38.
39. private void button2_Click(object sender, EventArgs e)
40. {
41. Try
42. {
43. //ذخیره نتیجه در متغیر
44. int i = cal.Sub(int.Parse(txtFirstNo.Text), int.Parse(txtSecNo.Text));
45. txtResult.Text = i.ToString();
46. }
47. catch (Exception ex)
48. {
49. MessageBox.Show(ex.Message);
50. }
51. }
52. }
53. }
آشنایی با پرکاربرد ترین کتابخانه های داخلی در سی شارپ
طبق آماریهای منتشر شده از سوی شرکت OverOps پرکاربردترین کتابخانه های داخلی در سی شارپ که بر اساس آمار GitHub تنظیم شده، به شرح زیر است:
- Newtonsoft
- NzbDrone: یک ویدیو رکوردر شخصی برای کاربران newsgroup بوده و در سال 2018 در رده 17 ام این لیست قرار داشته است.
- Abp (ASP.NET Boilerplate): که در فریم ورک مایکروسافت و برای طراحی برنامههای تحت وب مورد استفاده قرار میگیرد.
- DnSpy، یک دیباگر .NET بوده و از سال 2018، 9 رده سعود کرده است.
- ReSharper ساخته شرکت JetBrains که یک افزونه برای .NET میباشد.
- Cake: یک سیستم اتوماسیون چند سکویی که با C# DSL کار میکند.
- DotNetNuke: یک سیستم مدیریت محتوا است که در سال 2018 در رده 14 قرار داده و امسال 7 پله صعود داشته است.
- Osu: یک بازی متن باز
- NUnit: یک فریم ورک متن باز برای تست واحدها.
- Xunit: ابزاری برای تست واحدها که متن باز بوده و سال گذشته در رتبه چهارم این لیست قرار داشت.
به گفته این شرکت امسال کتابخانههای جدید زیادی به لیست کتابخانه های محبوب اضافه شده اند. با توجه به فعالیت های زیادی که شرکت مایکروسافت در زمینه پشتیبانی از انجمن ها و جوامع متن باز انجام داده و همچنین خرید GitHub، این اتفاق چندان هم دور از انتظار نبود.
در بین کتابخانههای جدید شاهد روندهای رو به رشد زیادی هستیم، که در این بین کتابخانههای مرتبط با ارز مجازی پیشرفت بیشتری داشتهاند. در بین این روند ها، کتابخانه های CMS هم رشد ویژهای داشته اند. این کتابخانهها برای توسعه بازی ها مورد استفاده قرار میگیرند.
نوع داده پویا در C#
در نسخه 4.0 زبان سی شارپ، نوع جدید از داده معرفی شد که به آن داده پویا گفته میشود. از این نوع داده برای حذف بررسی Compile-time type استفاده میشود. به عبارت دیگر کامپایلر برای اجرای برنامه نوع داده متغییر را بررسی میکند. اما اگر از داده Dynamic استفاده کنیم، دیگر کامپایلر این عمل را انجام نخواهد داد. در عوض کامپایلر نوع داده را در حین اجزا تشخیص میدهد. برای ایجاد متغیر پویا باید از کلمه کلیدی Dynamic استفاده کنید. مثال:
dynamic value = 123;
نکته مهم در مورد نوع داده پویا در C#
در اغلب موارد رفتار متغییر پویا همانند نوع شی خواهد بود. برای دریافت نوع داده در حین اجرا باید از دستور Gettype() استفاده شود. نوع داده پویا، در حین اجرا و بر اساس مقداری که به آن داده شده، نوع خود را تغییر میدهد. برای درک بهتر این موضوع به مثال زیر دقت کنید:
// پیاده سازی نوع داده پویا در برنامه سی شارپ
// نوع حقیقی متغییری که برای آن نوع داده پویا تعریف شده است:
using System;
class GFG {
// دستور اصلی
static public void Main()
{
// متغیر های پویا
dynamic value1 = "GeeksforGeeks";
dynamic value2 = 123234;
dynamic value3 = 2132.55;
dynamic value4 = false;
// دریافت نوع حقیقی داده
// متغییر های پویا
// با استفاده از دستور
// GetType()
Console.WriteLine("Get the actual type of value1: {0}",
value1.GetType().ToString());
Console.WriteLine("Get the actual type of value2: {0}",
value2.GetType().ToString());
Console.WriteLine("Get the actual type of value3: {0}",
value3.GetType().ToString());
Console.WriteLine("Get the actual type of value4: {0}",
value4.GetType().ToString());
}
}
خروجی برنامه فوق:
Get the actual type of value1: System.String
Get the actual type of value2: System.Int32
Get the actual type of value3: System.Double
Get the actual type of value4: System.Boolean
زمانی که یک شی در کلاسی با نوع داده پویا تعریف می شود، کامپایلر دیگر درستی دستور و نام خصوصیت متغیر را بررسی نمی کند.
علاوه بر این میتوان یک پارامتر پویا در برنامه قرار داد. در این صورت با استفاده از دستورات برنامه میتوان هر مقداری را در حین اجرای برنامه، برای متغیر تعریف کرد. به مثال زیر توجه کنید:
// ایجاد پارامتر پویا و دریافت تمامی مقادیر
using System;
class GFG {
// متدی که شامل پارامتر پویا است
public static void addstr(dynamic s1, dynamic s2)
{
Console.WriteLine(s1 + s2);
}
// متد اصلی
static public void Main()
{
//فراخوانی متد
// addstr
addstr("G", "G");
addstr("Geeks", "forGeeks");
addstr("Cat", "Dog");
addstr("Hello", 1232);
addstr(12, 30);
}
}
خروجی برنامه:
GG
GeeksforGeeks
CatDog
Hello1232
42
در صورتی که دستورات نوشته شده و خصوصیات با هم همخوانی نداشته باشند، کامپایلر برای آن استثنا قائل خواهد شد. اگر دستور GetType() برای بررسی نوع داده در بین کدها نوشته نشده باشد، کامپایلر خطا نمیدهد.