عنوان:

‫مروری بر سازنده‌ها - سازنده‌های ایستا (static)


نویسنده: مجتبی چنانی
تاریخ: ۱۳۹۱/۰۴/۳۱ ۱۳:۲۴
آدرس: www.dntips.ir
مروری بر سازنده‌ها
سازنده‌های ایستا (static) 

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

اما چند نکته درباره سازنده‌های ایستا وجود دارد:
• سازنده ایستا هیچگونه صفتی (public, private, protected, internal,… ) را نمی‌پذیرد.
• سازنده استاتیک نمی‌تواند پارامتر ورودی بپذیرد.
• سازنده استاتیک را نمی‌توان به صورت مستقیم فراخوانی کرد.
• برنامه نویس و کاربر هیچ کنترلی بر زمان فراخوانی این نوع سازنده ندارد.

کاربرد این نوع سازنده‌ها بیشتر در زمانهایی می‌باشد که برنامه نویس بخواهد قبل از استفاده کلاس یک سری پیش نیاز‌ها بررسی شود و یا یک سری تنظمیات ایجاد شود یا تخصیص حافظه‌ای صورت بگیرد. البته فقط یک بار نیاز است این ملزومات برطرف یا بررسی گردد. زیرا سازنده‌های استاتیک قبل از فراخوانی سازنده معمولی در هنگام ساخت اولین شیء از کلاس فراخوانی می‌شوند و دیگر فراخوانی نمی‌شوند

 class test
    {
        static string fname, lname;
        static test()
        {
            console.write("first name:");
            fname = console.readline();
            console.write("last name:");
            lname = console.readline();
            console.writeline("thank you");
        }
        public test()
        {
            //some other code
        }
    }
در مثال بالا همانطور که مشاهده می‌شود (یک مثال ساده ساده) در قبل از استفاده از کلاس یکبار نام و نام خانوادگی از کاربر پرسیده می‌شود که می‌توان نمونه‌ای  از این کد را به ورود کاربران تعمیم داد تا مطمئن شویم این کار پیش از هرچیزی صورت گرفته است.
 

نظرات

  • احمدعلی شفیعی در ۱۳۹۱/۰۴/۳۱ ۱۵:۴۵
    آیا میشه در کلاس‌های ایستا از سازنده‌های ایستا استفاده کرد؟
    • مجتبی چنانی در ۱۳۹۱/۰۴/۳۱ ۱۶:۱

      با سلام

      بله در یک کلاس ایستا می‌توان سازنده‌ی ایستا داشت، البته این نکته را فراموش نکنید که در کلاس‌های ایستا تمامی متد ها، خصوصیات، اشیاء و... باید ایستا باشند لذا شما نمی‌توانید سازنده معمولی داشته باشید.

  • امیر هاشم زاده در ۱۳۹۵/۰۷/۲۸ ۰:۱۵
    توضیح خوبی هم در این اینجا داده شده است.
    یک سازنده استاتیک هنگام دسترسی به یکی از اعضای استاتیک آن کلاس (متد یا پراپرتی) یا قبل از اولین وهله سازی در طول چرخه حیات برنامه فقط یکبار اجرا خواهد شد.بنابراین کارهایی که قرار است برای کلاس فقط یکبار انجام شود در این قسمت قرار می‌دهیم.
  • وحید نصیری در ۱۳۹۵/۰۷/۲۹ ۱۹:۵۱
    یک مثال جالب آن، کش کردن مقدار خواصی است که قرار است از فایل‌های کانفیگ خوانده شوند:
    public interface ICheckoutConfig
    {
        bool UseGeolocation { get; } 
    }
    
    public class CheckoutConfig : ICheckoutConfig 
    { 
        static CheckoutConfig() 
        { 
            bool.TryParse(ConfigurationManager.AppSettings["UseGeolocation"], out _useGeolocation); 
        }
     
        private static bool _useGeolocation; 
        public bool UseGeolocation 
        { 
            get { return _useGeolocation; } 
        } 
    }
    در اینجا هم سازنده‌ی کلاس استاتیک تعریف شده‌است و هم مقداری را که قرار است تنظیم کند. به این ترتیب خواندن از فایل کانفیگ فقط یکبار در طول عمر برنامه صورت خواهد گرفت.
  • وحید نصیری در ۱۳۹۵/۰۷/۲۹ ۱۹:۵۶
    یک مثال دیگر متداول آن، استفاده‌ی از آن در EF Code first است:
    public class ProjectsContext : DbContext 
    {
      //the static constructor runs a single time with the first instance of a class 
       static ProjectsContext() 
       {
         Database.SetInitializer(new CreateDatabaseIfNotExists<ProjectsContext>); 
       } 
    }
    در اینجا تنظیمات مهاجرت‌ها در داخل یک سازنده‌ی استاتیک قرار گرفته‌است. به این ترتیب این تنظیم در اولین باری که قرار است اولین وهله‌ی این کلاس ساخته شود، انجام خواهد شد و دیگر تکرار نمی‌شود.