دسترسی به توابع و اشیا موجود در کلاس های دیگر

سلام توی این پست میخوام نحوه انتقال اطلاعات و صدا زدن توابع بین کلاس ها یا UI برنامه رو بهتون نشون بدم!

انتقال اطلاعات

فرض کنید ما ۲ تا UI به نام های View1 و View2 داشته باشیم، و بخواهیم که یکسری اطلاعات شامل اعداد و رشته متن هایی رو از View1 به View2 ارسال کنیم. ممکنه از روش های مختلفی مثل ذخیره کردن موقت اطلاعات و بازیابی اون استفاده کنید! اما روش های بهتری هم هست به این نمونه دقت کنید:

چون قراره ما اطلاعات رو در View2 دریافت کنیم پس در این کلاس در بالاترین بخش (بالای تابع initialize ) کدهای زیر رو مینویسیم:

Public Static String myStringValue = String.Empty;
Public Static Int myIntValue = 0;

کاری که کردیم ایجاد ۲ تا متغیر عمومی و استاتیک هست که مقدار پیشفرضی رو هم براشون درنظر گرفتیم. دلیل عمومی و استاتیک بودن این هستش که ما قرار هست از کلاس های دیگه به اون دسترسی داشته باشیم. در قدم بعدی به View1 برمیگردیم و هرجایی که قرار هست اطلاعات ارسال و View نمایش داده بشه کد های زیر رو مینویسیم:

View2.myStringValue = "my name is mahdi";
View2.myIntValue = 24;
new View2().ShowDialog();

خب کار تمومه اگر اجرا کنیم اطلاعات ما به کلاس موردنظر ارسال میشه.

اما چطور توابع رو صدا بزنیم؟

برای اینکه قضیه رو بهتر متوجه بشین یه مثالی میزنم، من توی یکی از برنامه هام نوتیفیکشن های مختلفی رو به کاربر نشون میدم.(اطلاعاتی موجود نیست، اطلاعات را کامل کنید، نسخه جدید موجود است و….) من اگر میخواستم برای هر کدوم از این پیغام ها یک نوتیفیکشن جداگونه ایجاد کنم، هم حجم کدنویسی بالا میرفت، هم اینکه نگهداری و تغییر کدها بعدا دردسر میشد! برای حل این مشکل من یه نوتیفیکشن توی کلاس اصلی برنامه ایجاد کردم و با تعریف یکسری کلید، بر اساس کلید موردنظر پیغام مرتبط رو براش تنظیم کردم که توی تصویر زیر میتونید مشاهده کنید.

حالا برای نمایش نوتیفیکشن موردنظر کافیه به تابع موردنظر در کلاس اصلی دسترسی پیدا کنم و کلید دلخواه رو براش تعیین کنم تا نوتیفیکشن نمایش داده بشه!

برای دسترسی به تابع کلاس اصلی باید:

یک شی استاتیک از نوع خود کلاس ایجاد کنیم

internal static MainWindow main;

شی main که ایجاد کردیم رو مقدار دهی کنیم.

 public MainWindow()
        {
            InitializeComponent();
            main = this;
        }

حالا فرض کنید میخواهیم از View2 تابع نوتیفیکشن موجود در MainWindow رو صدا بزنیم پس باید بگیم:

MainWindow.main.ShowNotification(Key);

البته راه های زیادی برای دسترسی به اشیا و توابع کلاس های دیگه وجود داره یکی از روش ها به این صورت هست:

((MainWindow)System.Windows.Application.Current.MainWindow).ShowNotification(Key);

شما چی؟ راه بهتری سراغ دارین؟

نوشته دسترسی به توابع و اشیا موجود در کلاس های دیگر اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *