آموزش سی شارپ – استاتیک(Static ها)

آموزش سی شارپ – استاتیک(Static ها)

  مشخصات آموزش

  •   مدت زمان 29 دقیقه و 46 ثانیه
      حجم فایل 25.4 مگابایت
      زبان آموزش فارسی
  •   لینک دانلود

آموزش برنامه نویسی سی شارپ- Static ها  با سلام

در این پست و این ویدئو با مبحث Static در سی شارپ آشنا می شوید و با موارد زیر آشنا خواهیم شد.

– مفهوم استاتیک ها

– فیلد های استاتیک

– متد های استاتیک و دسترسی به آنها

– Property های استاتیک

– کلمه کلیدی Const و محدودیت های آن

– آشنایی با فیلد های  Readonly و محدودیت ها و نکات آنها و نحوه مقداردهی اولیه به فیلد های فقط خواندنی

– مقایسه Readonly با Const

– تلفیق مفهوم Readonly با static ها

– کاربرد متد های Static در فراخوانی سازنده های خصوصی

 Console.WriteLine("\n---------------- static -----------------");
            Console.WriteLine("value of Constant is ={0}",Human.NumofHands);

هنگامی که متدی یا فیلدی به صورت static تعریف می شود دیگر برای استفاده و دسترسی به آن نیازی به ساخت شی نیست.و با دستگیره کلاس می توانیم به آن فیلد یا متد استاتیک دسترسی داشته باشیم.همانطور که در تکه کد بالا مشاهده می کنید با استفاده از کلاس Human به فیلد NumofHands که به صورت استاتیک هست دسترسی داریم بدون ساخت شی ء.

* نکته ای دیگری که لازم به ذکر هست  این است که اعضای استاتیک یک کلاس در بین همه ی اشیاء ساخته شده از آن کلاس مشترک هست.

Const:

گاهی در برنامه تان در مثلا صد جای برنامه از یک مقدار ثابت a(مثلا 30) استفاده می کنیم.فرض کنید که نظرتان به هر دلیل عوض شود و بخواهید این مقدار 30 را به مقدار دیگری تغییر دهید.مجبورید که هر صد جا را ویرایش کنید.

راه کار بهتری هست و آن استفاده از کلمه کلیدی Const هست.هنگامی که یک فیلد به صورت Const تعریف می شود حتما باید با یک مقدار ثابت مقدار دهی اولیه شود.حال اگر بخواهیم مقدار را عوض کنیم دیگر لازم نیست صد جای برنامه دست به تغییر بزنیم کافیست مقدار همین فیلد const را تغییر دهیم و پروژه را دوباره کامپایل کنیم.

نحوه تعریف یک فیلد ثابت در C#:

public  const  int NumofHands=2;

* نکته :اگر فیلدی که به صورت const تعریف شود و هنگام اعلان با یک مقدار ثابت مقدار دهی اولیه شود دیگر مجاز نیستیم که در جاهای مختلف این مقدار را عوض کنیم.

* نکته : هر فیلدی که به صورت Const تعریف شود به طور پیشفرض در دل خود به صورت استاتیک خواهد بود و لازم نیست که از کلمه static استفاده کنیم.اگر از این کلمه استفاده کنیم دچار یک خطای کامپایلری می شویم.

* نکته:همانطور که ذکر شد که فیلد های const به طور پیشفرض استاتیک هستند پس با استفاده از نام کلاس می توانیم به آنها دسترسی داشته باشیم و آنها را فقط بخوانیم و همچنین به خاطر استاتیک بودن بین همه ی اشیاء ساخته شده از آن کلاس مشترک خواهند بود.

…..

فیلد های ReadOnly:

 public readonly int NumofFoots;

فیلدهای فقط خواندنی (ReadOnly) شبیه به فیلد های Const هستند با اندکی تفاوت.

* نکته: این فیلد ها بین همه ی اشیاء ساخته شده از یک کلاس مشترک نیستند مگر آنکه آنها را به صورت static هم تعریف کنیم.اگر فیلدی در کلاسی به صورت ReadOnly باشد همه ی اشیایی که از این کلاس ساخته می شوند یک فیلد فقط خواندنی مختص به خود خواهند داشت.

* نکته: پس طبق نکته گفته شده قبلی ، می توان یک فیلد ReadOnly را با همراه با کلمه static ترکیب کرد.

public static readonly int numofEyes;

*نکته : این فیلد های فقط خواندنی ، فقط باید در داخل سازنده مقدار دهی اولیه شوند.

* نکته:در صورتی که فیلد های فقط خواندنی در خارج از سازنده مقدار دهی اولیه شوند دچار یک خطا خواهیم شد.

* نکته: برخلاف const که با نام کلاس به آن دسترسی داشتیم ، برای دسترسی به فیلد فقط خواندنی (ReadOnly) با استفاده از دستگیره نام شی و همچنین اشاره گر this می توانیم دسترسی داشته باشیم.اما چنانچه اگر این فیلد فقط خواندنی با استاتیک ترکیب شده باشد آنگاه مانند const با استفاده از نام کلاس به آن دسترسی خواهیم داشت.

کلاس های استاتیک

اگر کلاسی به صورت استاتیک باشد مجاز به ساختن شی از آن (یعنی استفاده از کلمه کلیدی new ) نیستیم.

سازنده ی Static

static Human()
        {
            Human.numofEyes = 2;

        }

سازنده ی Static سازنده ای است همنام با کلاس که وظیفه مقدار دهی اولیه به اعضای استاتیک برای یکبار قبل از اولین اجرا را خواهد داشت.

* نکته : سازنده static سازنده ای بدون پارامتر هست.درصورتی که پارامتر تعریف کنید با خطا برخورد خواهید کرد.

* نکته این سازنده هیچگونه access Modifier نمی تواند داشته باشد حتی public.

* نکته :هر سازنده ی استاتیک تنها می تواند اعضای استاتیک را مقدار دهی کند و نه سایر اعضا را.

* نکته: در یک کلاس می توانیم دو نوع سازنده استاتیک و معمولی که هم نام کلاس هستند و بدون پارامتر داشته باشیم و هیچگونه خطایی رخ نخواهد داد.

سازنده خصوصی (Private Constructor )

تا حالا با سازنده ی معمولی و استاتیک آشنا شده اید.سربارگذاری سازنده ها رو هم که در آموزش های قبلی آموخته اید اما در این آموزش با سازنده خصوصی آشنا می شویم.

سازنده ای که سطح دسترسی آن به جای public بودن به صورت private هست.بنابراین چیزی که واضح است بیرون از کلاس به آن نمی توانیم دسترسی داشته باشیم.پس از بیرون کلاس نمی توانیم از آن شی ای بسازیم.

راه حل به نظر شما چیست؟؟؟؟ سعی کنید از چیزهایی که تا حالا آموخته اید استفاده کنید.

بله درست حدس زدید! استفاده از یک متد static در داخل خود کلاس که این متد به صورت Public هست.اینطوری می تونید از بیرون کلاس و با استفاده از نام کلاس به این متد استاتیک دسترسی داشته باشید و سازنده خصوصی را که در داخل خود کلاس هصت و صد البته این متد به آن دسترسی دارد فراخوانی کنید و شی ایجاد کنید.

private Human()
        {
           //................
        }

حالا متدی که گفتیم استاتیک هست می تواند به طور مثال به صورت زیر و عضو کلاس Human باشد.

public static Human CreateObject()
        {
            Human H = new Human();
            Console.WriteLine("Create an Object");
            return H;
        }

حالا حتما سوال براتون پیش آمده که  خب چرا لقمه را پیچوندیم و یا گره ای که بادست باز میشه را که کور گره نمیزنن ! عجب ضرب المثلی شد 😆

به نظرتون میشد یک سازنده معمولی تعریف کنیم و اینهمه دنگ وفنگ نداشته باشیم.خب یه خرده از جواب رومن میدم ولی کاملش رو حتما جستجو کنید تا لقمه آماده نباشه که هلو برو تو گلو!!!!!!

– گاهی نیاز هست که درست قبل از ساخت یک شی یک متد اجرا شود و یک سری کارها را برای ما انجام دهد.

– گاهی نیاز هست که در ساخت شی محدودیت هایی بزاریم.( مثلا حداکثر قرار دادن در ایجاد شی و …. )

شما حتما بیشتر جستجو کنید…

توصیه می کنم که خود ویدئو را دانلود و تماشا کنید که کاملتر و با مثال های بهتری هست.

One Response to “آموزش سی شارپ – استاتیک(Static ها)”

  1. Jaylynn گفت:

    That’s a smart answer to a tricky quisteon

ارسال دیدگاه

نام (*)
پست الکترونیکی (*)
وبسایت

  مشخصات مدرس

محمودزاده بخت آباد سید حامد
دانشجوی رشته مهندسی مکانیک از دانشگاه سیستان وبلوچستان علاقه مند به مباحث گرافیکی انجام چندین طراحی شامل: طراحی تیزر - کلیپ - سایت و.... در حال حاضر مدیریت سایت Learningtv.ir رو برعهده دارم. در کل عاشق بازی سازی با یونیتی هستم.

  دوره‌های پیشنهادی