همه برنامه نویسان سی شارپ با مفهومی به نام متد سازنده آشنایی داشته و از آن به عنوان یک Initializer در سطح کلاس استفاده مینمایند، ولی شاید همه از وجود یک نوع Static از متدهای سازنده در هر کلاس به طور دقیق اطلاع نداشته و کاربرد و تفاوتهای آن با نوع Instant از متدهای سازنده را به درستی ندانند. در این مقاله به صورت کوتاه هر دو نوع را معرفی و به بررسی تفاوتهای آنها خواهیم پرداخت.
بسمه تعالی
تعریف، بررسی و مقایسه Instance Constructor و Static Constructor در زبان سی شارپ
همه برنامه نویسان سی شارپ با مفهومی به نام متد سازنده آشنایی داشته و از آن به عنوان یک Initializer در سطح کلاس استفاده مینمایند، ولی شاید همه از وجود یک نوع Static از متدهای سازنده در هر کلاس به طور دقیق اطلاع نداشته و کاربرد و تفاوتهای آن با نوع Instant از متدهای سازنده را به درستی ندانند. در این مقاله به صورت کوتاه هر دو نوع را معرفی و به بررسی تفاوتهای آنها خواهیم پرداخت.
1- Static Constructor
این نوع از متد سازنده پیش از ایجاد اولین Object سطح کلاس صدا زده خواهد شد و بیشتر برای مقدار دهی مقادیر Static سطح کلاس کاربرد دارد. شایان ذکر است این عملیات فقط و فقط یکبار انجام خواهد شد. زمان اجرای این متد به درستی و روشنی بیان نشده و حدس زده میشود در هنگام ایجاد اسمبلیها این رخ داد به وقوع بپیوندد.
قوانین ایجاد یک Static Constructor
1- هر کلاس فقط یک Static Constructor خواهد داشت.
2- این نوع از متد سازنده، پارامتر ورودی نخواهد داشت.
3- برای این نوع از متد سازنده، نوع نمی توان تعریف نمود.
4- امکان صدا زدن این نوع متد سازنده با کدنویسی به هیچ شکلی امکان پذیر نیست.
2- Instance Constructor
این نوع از متد سازنده در زمان ایجاد یک Object از کلاس درون حافظه ایجاد خواهد گردید.
شباهتها این نوع متد سازنده
1- هر دو باید همنام کلاس باشند
2- هیچ کدام مقداری را Return نخواهند نمود
تفاوتهای موجود در این دو نوع متد سازنده
1- نوع Static پارامتر ورودی قبول نمی کند
2- نوع Static حتی Access Modifier هم نمی پذیرد
به مثال زیر دقت کنید.
- class RandomNumberClass
- {
- private static Random RandomKey;
- static RandomNumberClass()
- {
- RandomKey = new Random();
- }
- public int GetRandomNumber()
- {
- return RandomKey.Next();
- }
- }
- class Program
- {
- static void Main()
- {
- RandomNumberClass a = new RandomNumberClass();
- RandomNumberClass b = new RandomNumberClass();
- Console.WriteLine("Next Random #: {0}", a.GetRandomNumber());
- Console.WriteLine("Next Random #: {0}", b.GetRandomNumber());
- }
- }
به مقادیر خروجی متدها دقت کنید
Next Random #: 1920476323
Next Random #: 1895533763