این مقاله به شما کمک خواهد کرد تا درک بهتری از نحوه استفاده و تفاوتهای بین انواع سازنده در سی شارپ «#Constructor in C» پیدا کنید و از آنها به طور مؤثر در پروژههای خود بهره ببرید.
مقدمه
سازنده در سی شارپ #C ابزار حیاتی برای مدیریت فرآیند ایجاد شیء و مقداردهی اولیه به اعضای آن هستند. این متدهای خاص به طور خودکار هنگام ایجاد نمونهای از کلاس فراخوانی میشوند و به برنامهنویسان این امکان را میدهند که مقادیر اولیه مورد نیاز برای دادههای کلاس را به صورت کارآمد و منظم تعیین کنند. در ادامه این مقاله، از مجموعه مقالات پی استور به بررسی انواع مختلف سازنده در سی شارپ میپردازیم، از جمله سازندههای پیشفرض «Default»، پارامتردار «Parameterized»، کپی «Copy»، خصوصی «Private» و استاتیک «Static». هر یک از این سازندهها ویژگیها و کاربردهای خاص خود را دارند که در مواقع مختلف توسعه نرمافزار به کمک برنامهنویسان میآیند.
سازنده در سی شارپ
سازنده یک متد خاص در کلاس است که به طور خودکار هر بار که نمونهای از کلاس ایجاد میشود، فراخوانی میشود. سازنده در سی شارپ اجزای اساسی برنامهنویسی شیءگرا هستند. مانند متدها، آنها مجموعهای از دستورات را شامل میشوند که در زمان ایجاد شیء اجرا میشوند. سازنده برای اختصاص مقادیر اولیه به اعضای داده همان کلاس «Class» استفاده میشود. برخی نکات مهم درباره سازندهها در زیر آمده است:
- سازنده یک کلاس باید نامی مشابه با نام کلاس خود داشته باشد.
- یک کلاس میتواند هر تعداد سازنده داشته باشد.
- یک سازنده نمیتواند abstract، final یا Synchronized باشد.
- سازنده هیچ نوع بازگشتی ندارد.
مثال
class PStore { // constructor of PStore class public PStore( ) { } } // Using of this constructor PStore obj = new PStore();
انواع سازنده در سی شارپ
در زبان برنامهنویسی #C انواع مختلفی از سازندهها وجود دارد که هرکدام برای هدف خاصی طراحی شدهاند. رایجترین انواع سازنده در سی شارپ عبارتند از:
- سازنده پیش فرض «Default Constructor»
- سازنده کپی «Copy Constructor»
- سازنده پارامتردار «Parameterized Constructor»
- سازنده خصوصی «Private Constructor»
- سازنده استاتیک «Static Constructor»
سازنده پیش فرض در سی شارپ
سازندهای که پارامتر ندارد، سازنده پیشفرض نامیده میشود. سازنده پیشفرض تمامی نمونههای کلاس را به مقادیر یکسانی مقداردهی اولیه میکند. سازنده پیشفرض تمام فیلدهای عددی را به صفر و تمام فیلدهای رشتهای و شیءها را به null درون کلاس مقداردهی میکند.
مثال: قطعه کد زیر یک کلاس ساده در زبان #C تعریف میکند که یک سازنده پیشفرض دارد.
// Default constructor using System; class PStore { // Initialize with default value int num = 0; // Initialize with an empty string string name = ""; public PStore() { Console.WriteLine("Constructor Called"); } public static void Main() { // Invoke default constructor PStore PgS = new PStore(); // Display default values of fields Console.WriteLine(PgS.name); Console.WriteLine(PgS.num); } }
خروجی
Constructor Called ۰
توضیح: سازنده پیشفرض برای مقداردهی اولیه یا انجام عملیات خاص هنگام ایجاد یک شیء استفاده میشود. متغیرهای عضو کلاس میتوانند به صورت مستقیم مقداردهی اولیه شوند یا از مقدار پیشفرض نوع داده خود استفاده کنند.
در مثال بالا مقدار پیشفرض int برابر ۰ است. مقدار پیشفرض string رشته خالی ” ” است.
سازنده پارامتردار در سی شارپ
سازندهای که حداقل یک پارامتر دارد، سازنده پارامتردار نامیده میشود. این سازنده میتواند هر نمونه از کلاس را به مقادیر مختلف مقداردهی کند.
مثال: قطعه کد زیر نمونهای از سازنده پارامتری در زبان C# است.
// Parameterized Constructor using System; class PStore { // store name value String n; // store Id int i; // the values of passed arguments // while object of that class created. PStore(String n, int i) { this.n = n; this.i = i; } public static void Main() { // It will invoke parameterized PStore o = new PStore("ProgramStore", 1); Console.WriteLine("Name = " + o.n + " Id = " + o.i); } }
خروجی
Name = ProgramStore Id = 1
توضیح: سازنده با پارامتر برای مقداردهی اولیه متغیرهای عضو کلاس هنگام ایجاد شیء استفاده میشود. از کلمه کلیدی this برای دسترسی به متغیرهای عضو کلاس استفاده میکنیم، مخصوصاً وقتی نام متغیرها و پارامترها یکسان است.
در مثال بالا، متغیرهای n و i مقدار خود را مستقیماً از آرگومانهای سازنده دریافت میکنند.
سازنده کپی در سی شارپ
سازنده کپی برای ایجاد یک شیء جدید با کپی کردن مقادیر از یک شیء موجود از همان کلاس استفاده میشود. این سازنده زمانی مفید است که نیاز به تکرار یک شیء یا ایجاد یک شیء جدید بر اساس وضعیت شیء دیگر داشته باشید.
مثال: تکه کد زیر نمونهای از سازنده کپی در زبان #C است که برای ایجاد یک شیء جدید از روی یک شیء موجود استفاده میشود.
// Copy constructor using System; class PStore { private string month; private int year; // declaring Copy constructor public PStore(PStore s) { month = s.month; year = s.year; } // Instance constructor public PStore(string month, int year) { this.month = month; this.year = year; } // Get details of PStore public string Details { get { return "Month: " + month.ToString() + "\nYear: " + year.ToString(); } } public static void Main() { // Create a new PStore object. PStore P1 = new PStore("January", 2025); // here is P1 details is copied to g2. PStore P2 = new PStore(P1); Console.WriteLine(P2.Details); } }
خروجی
Month: January Year: 2025
توضیح: سازنده کپی در زبان #C برای کپیکردن مقادیر یک شیء به شیء دیگر استفاده میشود.
با استفاده از سازنده کپی، میتوانید مطمئن شوید که شیء جدید مستقل از شیء اصلی است اما مقادیر اولیه مشابهی دارد.
ویژگی Details اطلاعات شیء را با قالببندی مناسب بازمیگرداند و به راحتی میتوان آن را چاپ کرد.
سازنده خصوصی در سی شارپ
اگر یک سازنده در سی شارپ با مشخصکننده private ایجاد شود، به آن سازنده خصوصی گفته میشود. این نوع سازنده اجازه نمیدهد که کلاسهای دیگر از این کلاس مشتق شوند و همچنین نمیتوان یک نمونه از این کلاس ایجاد کرد. برخی نکات مهم در مورد این موضوع در زیر ذکر شده است:
- این پیادهسازی الگوی کلاس تکنمونه (singleton) است.
- از سازنده خصوصی زمانی استفاده میشود که تنها اعضای استاتیک در کلاس وجود داشته باشند.
- استفاده از سازنده خصوصی مانع از ایجاد نمونههای آن کلاس میشود.
نکته: میتوان از مشخصکنندههای دسترسی در اعلان سازنده برای کنترل دسترسی آن استفاده کرد، یعنی مشخص کرد که کدام کلاسها میتوانند سازنده را فراخوانی کنند. سازنده خصوصی یکی از مثالهای آن است.
مثال: تکه کد زیر نمونهای از سازنده خصوصی «Private Constructor» در زبان #C است که به ما نشان میدهد چگونه میتوان یک سازنده را بهصورت خصوصی (private) تعریف کرد و همچنین از اعضای استاتیک «static» کلاس استفاده کرد.
// Private constructor using System; public class PStore { // private Constructor private PStore() { Console.WriteLine("from private constructor"); } public static int count_ps; public static int ps_Count() { return ++count_ps; } public static void Main() { // If you uncomment the following // statement, it will generate // an error because the constructor // is unaccessible: // PStore s = new PStore(); // Error PStore.count_ps = 99; // Accessing without any // instance of the class PStore.ps_Count(); Console.WriteLine(PStore.count_ps); // Accessing without any // instance of the class PStore.ps_Count(); Console.WriteLine(PStore.count_ps); } }
گامهای اجرای برنامه:
- مقدار count_ps ابتدا ۹۹ مقداردهی میشود.
- با فراخوانی اول ps_Count، مقدار آن ۱۰۰ میشود و چاپ میشود.
- با فراخوانی دوم ps_Count، مقدار آن ۱۰۱ میشود و دوباره چاپ میشود.
خروجی
۱۰۰ ۱۰۱
ایجاد شیء از کلاس ممنوع است: در مثال بالا خط ;()PStore s = new PStore کامنت شده است. اگر این خط فعال شود، کد با خطا مواجه میشود زیرا سازنده خصوصی است و از خارج از کلاس قابل دسترسی نیست.
کار با متغیر استاتیک: مقدار اولیه count_ps برابر با ۹۹ تنظیم میشود. سپس متد استاتیک ps_Count دو بار فراخوانی میشود و مقدار count_ps هر بار افزایش مییابد.
سازنده استاتیک در سی شارپ
سازنده استاتیک تنها یکبار در کلاس فراخوانی میشود و در هنگام ایجاد اولین مرجع به یک عضو استاتیک در کلاس فراخوانی میشود. سازنده استاتیک فیلدها یا دادههای استاتیک کلاس را مقداردهی میکند و تنها یکبار اجرا میشود.
نکاتی که باید به یاد داشته باشید:
- نمیتوان آن را به طور مستقیم فراخوانی کرد.
- زمانی که در حال اجرا است، کاربر کنترلی بر آن ندارد.
- سازنده استاتیک هیچ مشخصکننده دسترسی یا پارامترهایی نمیگیرد.
- به طور خودکار برای مقداردهی اولیه کلاس قبل از ایجاد اولین نمونه فراخوانی میشود.
سازنده غیر استاتیک «Instance»: در سیشارپ نوعی متد خاص است که هنگام ایجاد یک شیء از کلاس به صورت خودکار فراخوانی میشود. این نوع سازنده به شما امکان میدهد که مقادیر اولیهای را به متغیرهای عضو کلاس اختصاص دهید یا تنظیمات خاصی را برای شیء انجام دهید. سازنده غیر استاتیک هر بار که یک شیء جدید ایجاد میشود، اجرا میشود.
مثال: تکه کد زیر یک مثال ساده استفاده از سازنده استاتیک «Static Constructor» در زبان #C است.
// Static constructor using System; class PStore { // It is invoked before the first // instance constructor is run. static PStore() { Console.WriteLine("Static Constructor"); } public PStore(int i) { Console.WriteLine("Instance Constructor " + i); } public string ps_detail(string name, int id) { return "Name: " + name + " id: " + id; } public static void Main() { // Here Both Static and instance // constructors are invoked for // first instance PStore obj = new PStore(1); Console.WriteLine(obj.ps_detail("PgS", 1)); PStore obj1 = new PStore(2); Console.WriteLine( obj1.ps_detail("ProgramStore", 2)); } }
مراحل اجرای کد بالا:
- در دستور ;PStore obj = new PStore(1)، سازنده استاتیک اجرا میشود (چون این اولین باری است که کلاس استفاده میشود). سپس سازنده نمونه فراخوانی میشود و مقدار ۱ چاپ میشود.
- دستور ;obj.ps_detail(“PgS”, ۱)، جزئیات شیء obj را چاپ میکند
- در دستور ;PStore obj1 = new PStore(2)، فقط سازنده نمونه اجرا میشود، زیرا سازنده استاتیک قبلاً اجرا شده است. مقدار ۲ چاپ میشود.
- دستور ;obj1.ps_detail(“ProgramStore”, ۲)، جزئیات شیء obj1 را چاپ میکند.
خروجی پس از اجرای برنامه خروجی به صورت زیر خواهد بود:
Static Constructor Instance Constructor 1 Name: PgS id: 1 Instance Constructor 2 Name: ProgramStore id: 2
نتیجهگیری
سازنده در سی شارپ بخش اساسی و ضروری برنامهنویسی شیءگرا هستند که فرآیند ایجاد و مقداردهی اولیه به اشیاء را ساده و کارآمد میکنند. انواع مختلف سازندهها، از جمله سازندههای پیشفرض، پارامتردار، کپی، خصوصی و استاتیک، هر کدام ویژگیها و کاربردهای خاص خود را دارند که به برنامهنویسان این امکان را میدهند که بسته به نیاز پروژه، از آنها بهرهبرداری کنند. درک و استفاده صحیح از این سازندهها میتواند به بهبود ساختار و کارایی برنامهها کمک کند و همچنین از ایجاد خطاهای احتمالی در طول توسعه نرمافزار جلوگیری نماید. در نتیجه، تسلط بر نحوه استفاده از سازنده در سی شارپ، بخشی اساسی از مهارتهای برنامهنویسی است که به طراحی بهینه و نگهداری راحتتر کدها منجر میشود.
با سلام
من تازه یادگیری سی شارپ را شروع کردهام و این مقاله به من کمک کرد تا مفهوم سازندهها را بهتر درک کنم.
ممنون از شما
با سلام
مقاله بسیار مفیدی بود ممنون از شما.
عالی بود. ممنون از مقاله خوبتان