تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: تفاوت در سه نوع متفاوت کلاس

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    14 تفاوت در سه نوع متفاوت کلاس

    با سلام و وقت بخیر و خسته نباشید خدمت دوستان محترم

    نظر شما در رابطه با تفاوت بین Static class و Private constructor در چیست؟ ما در هر دو نمیتوانیم شی ایجاد کنیم.
    پس کاربرد و زمینه استفاده هرکدام چه موقع است؟

    تکلیف سازنده استاتیک Static Constructor مشخص هست. 1 بار ایجاد می شود و یا برای مقدار دهی اولیه به اعضای استاتیک به کار می رود
    using System;
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این دو کاملاً متفاوت هستند.
    در واقع شما فقط و فقط یک شباهت بسیار ناچیز را در یک حالت خاص ملاک گرفته اید.

    کلاس های static در واقع اصلاً کلاس نیستند.
    در VB با کلمه Module (بجای کلمه Class) تعریف میشوند.
    نه ارث از چیزی برده میشوند و نه قابلیت ارث بری دارند.
    نه میتوانند رابطی را شامل شوند (فقدان پلی مورفیزم)
    نه میتواند نمونه سازی شوند.
    نه میتوانند سازنده ای داشته باشند.
    (فقط سازنده static میتوانند داشته باشند که در واقع کار وهله یا نمونه سازی را انجام نمیذهد و فقط متغییرهای static را مقداردهی میکند)
    و هیچ یک از مصادیق شی گرایی در آن معنا ندارد.
    حتی نمیتوانید متغیری از این نوع تعریف کنید.
    متغییرها و متدهای این کلاسها همه باید static باشند.
    در واقع مدولهای static صرفاً یک ظرف برای توابع مستقلی هستند.

    نمونه بسیار بارز یک مدول استاتیک میتواند Math باشد که حاوی توابع مستقل ریاضی است.
    توابعی مستقلی مانند Sin و Cos و Abs و... و... که ورودی میگیرند و خروجی را محاسبه میکنند و ارتباط خاصی با شی گرایی هم ندارند.

    اگر static وجود نداشت با جادادن توابع مستقلی مانند Sin دچار مشکل میشدم.
    برای اینکه عرف حفظ شود و این توابع (مانند ++C) همینطوری در namespace درج شوند، ظرفی فرضی به نام static class برای آنها قرار داده میشود تا در یک پوشه مانندی منظم شوند.

    ==============

    در مقابل کلیه کلاس های دیگر قابلیت نمونه سازی را دارند.
    اگر کلاسی سازنده Private داشته باشد، مانند سایر متدهای Private است!
    فقط این سازنده از خارج از کدهای کلاس قابل نمونه سازی نیست.
    ولی حتماً از کلاس دیگری ارث برده شده (بیان نشود از کلاس Object ارث برده میشود)
    میتواند رابطهایی (interface) هایی را شامل شود، متدهایی را override کند.

    تنها تفاوتش با سایر کلاس ها همان است که بیان شد، فقط (با روشهای معمول) از بیرون نمیتوان آن را نمونه سازی کرد.
    وگرنه خیلی راحت میتوانید متغیرهایی از این جنس کلاس تعریف کنید و اشیا ساخته شده آن (از طرق دیگر) را استفاده و حمل کنید.


    یا کلاس های abstract هم گرچه قابل نمونه سازی (New) نیستند ولی بعد از یک وراثت و پیاده سازی متدهای خالی شان، میتوانند نمونه سازی شوند و در متغییرها قرار بگیرند.


    در واقع (اگر نام static class را کلاس نگذاریم) در کلاس ها ما تلاش میکنیم تا حد ممکن استفاده از متغییرها و متدهای static را کاهش دهیم.
    چون اجزای static گرچه درجای خود مفید هستند ولی خیلی با مفاهیم شی گرایی قابل پیوند و دوستی نیستند و استفاده زیاد و بیرویه از آنها برنامه را به یک برنامه قدیمی روال گرا (که فقط یک سری تابع دارد که پشت سرهم اجرا میشوند) تنزل میدهد.

    موفق باشید.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •