نمایش نتایج 1 تا 9 از 9

نام تاپیک: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

  1. #1

    دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    اگه من دو تا کلاس داشته باشم به اسم base و derived

    اگه توی کلاس base یک فیلد داشته باشم به اسم a و توی کلاس derived هم یک فیلد به اسم a داشته باشم

    اگه کلاس derived از کلاس base ارث بری داشته باشه

    اگه من یک شی از کلاس derived نمونه سازی کنم به اسم X

    چطوری میشه توسط شی X به فیلد a کلاس base دسترسی داشته باشم

    در حالت عادی X.a=10 به فلید a موجود در کلاس derived دسترسی دارم نه فیلد a که در base تعریف شده

  2. #2
    کاربر دائمی آواتار shahab_ss
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    bangkok
    سن
    43
    پست
    434

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده


  3. #3

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    نقل قول نوشته شده توسط shahab_ss مشاهده تاپیک
    لینکی دوست عزیزمون ارسال کردن شامل محتویات زیر میشه (نحوه استفاده از کلمه base)
    class A
    {
    int i;
    A(int n, int m)
    {
    x = n;
    y = m
    Console.WriteLine("n="+x+"m="+y);
    }
    }

    class B:A
    {
    int i;
    B(int a, int b):base(a,b)//calling base class constructor and passing value
    {
    base.i = a;//passing value to base class field
    i = b;
    }
    public void Show()
    {
    Console.WriteLine("Derived class i="+i);
    Console.WriteLine("Base class i="+base.i);
    }
    }

    class MainClass
    {
    static void Main(string args[])
    {
    B b=new B(5,6);//passing value to derive class constructor
    b.Show();
    }
    }


    با این مثال می شه نحوه دسترسی به اعضای کلاس base رو از بدنه کلاس derived نشان داد

    ولی سوال من اینه
    چطوری میشه توسط شی X که از کلاس derived نمونه سازی شده است به فیلد a کلاس base دسترسی داشته باشم

  4. #4

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    لطفا" ، دوستانی اطلاعاتی درباره سوال مطرح شده دارند ، راهنمایی بفرمایند

    با تشکر

  5. #5
    کاربر دائمی آواتار SMRAH1
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    مشهد
    پست
    884

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    سلام

    1) با توجه به اینکه برنامه نویسی در کلاس مشتق شده دوباره متغیر کلاس پایه را تعریف کرده است،قطعا منظوری داشته و نباید دیگر بخواهیم دسترسی به آن متغیر کلاس پایه داشته باشیم (اگر مورد خواصی در این زمینه سراغ دارید که نیاز به این دسترسی است ،لطفا برای کسب تجریه بنده نیز ذکر کنید).
    2) با این حال دو راه است.اول اینکه در کلاس دوم ،یک property برای دسترسی به متغیر کلاس اول معرفی کنیم.دوم : با توجه به تعریف زیر :
    public class A
    {
    public int i;
    public A()
    {
    i = 0;
    }

    public string GetStringA()
    {
    return "Class A : i = " + i.ToString();
    }
    }

    public class B : A
    {
    public int i;
    public B()
    {
    base.i = 1;
    i = 0;
    }

    public string GetStringB()
    {
    return "Class B : i = " + i.ToString();
    }
    }
    دستور زیر مطلوب شما است :
    B b = new B();
    ((A)b).i = 2;
    MessageBox.Show(b.GetStringA() + "\n" + b.GetStringB());
    موفق باشید

  6. #6
    VIP
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    www
    سن
    40
    پست
    1,247

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    2 تا فیلد هم نام که نمیشه داشت، اصلا چجوری میخوای از هم تمایزشون بدی؟
    اینکه به فیلد a کلاس پدر نمیتونی دسترسی داشته باشی (در سناریو شما) یه قابلیت هست.

  7. #7

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    با تشکر از راهنمای SMRAH1
    مشکل من حل شد
    علت طرح این سناریو

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

    یک کلاس به اسم تنخواه گران دارم(ارث بری از کلاس کارمند داره)*

    حالا من فرض رو بر این گذاشتم که برای تمام کارمندان شی ای از کلاس کارمندان نمونه سازی کنم به جز تنخواه گردانان سیستم که از کلاس تنخواه واسشون شی در نظر میگیرم

    حالا اگه کلاس کارمندان متدی برای چاپ اطلاعات کلی (نام ، نام خانوادگی و...) هر کارمند داشته باشه و کلاس تنخواه گردان متدی برای چاپ اطلاعات کلی (نام ، نام خانوادگی ، میزان اعتبار و ..) هر تنخواه داشته باشه (متد های چاپ اطلاعات در کلاس کارمند و تنخواه هم نام انتخاب شده اند تا استاندارد تر باشه)

    نتیجه : من لازم داشتم بتوانم توسط شی تنخواه اطلاعات کلی را چاپ کنم در حالت عادی آخرین ویرایش override شده هر متد اجرا میشه یعنی همیشه متد چاپ اطلاعات (نام ، نام خانوادگی ، میزان اعتبار و ..) در دسترسه ولی در جایگاه خواصی می خواستم متد چاپ اطلاعات کلی (نام ، نام خانوادگی و...) را فراخوانی کنم

    به نظر شما راه دیگری برای رسیدن به این مطلوب وجود دارد؟
    __________________________________________________ ____
    * تنخواه گران ها : نوعی از کارمندان هستند با این تفاوت که عملیات خواص مالی (خرید و اختصاص اعتبار ) را باید پوش دهند

  8. #8
    کاربر دائمی آواتار SMRAH1
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    مشهد
    پست
    884

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    سلام

    با برداشت من از توضیحات شما،اینترفیس برای همین مواقع کاربرد داره(در اینترفیس یک تابع همنان تابع کلاس پایه داشته باشید که اطلاعات مد نظرتون را چاپ کنه).

    در ضمن من متوجه این نکته نشدم که :
    من لازم داشتم بتوانم توسط شی تنخواه اطلاعات کلی را چاپ کنم در حالت عادی آخرین ویرایش override شده هر متد اجرا میشه یعنی همیشه متد چاپ اطلاعات (نام ، نام خانوادگی ، میزان اعتبار و ..) در دسترسه ولی در جایگاه خواصی می خواستم متد چاپ اطلاعات کلی (نام ، نام خانوادگی و...) را فراخوانی کنم
    شما می خواهید که با یک متد (همنام که override شده) در هر کدام از این اشیا یک خروجی متفاوت داشته باشد یا نه؟؟؟!

    موفق باشید

  9. #9

    نقل قول: دسترسی به اعضای کلاس پایه توسط شی نمونه سازی شده

    سلام

    نقل قول نوشته شده توسط SMRAH1 مشاهده تاپیک
    با برداشت من از توضیحات شما،اینترفیس برای همین مواقع کاربرد داره(در اینترفیس یک تابع همنان تابع کلاس پایه داشته باشید که اطلاعات مد نظرتون را چاپ کنه).

    من از اینترفیس بلدم این طوری استفاده کنم ! لطفا اگه قابلیتی داره که بتونه مسئله من را راحت تر حل بکنه بفرمایید

    یک اینترفیس تعریف کنم به اسم "امور مربوط به چاپ".
    داخل اینترفیس سیگنچر "چاپ اطلاعات کلی" را تعریف کنم.
    کلاس کارمند و تنخواه گردان این اینترفیس رو پشتیبانی ( پیاده سازی کنند )
    حالا در کلاس کارمند متد "چاپ اطلاعات کلی" بدنه ای داشته باشد که (نام ، نام خانوادگی و...) را چاپ کند
    و در کلاس تنخواه گردان متد "چاپ اطلاعات کلی" بدنه ای داشته باشد که (نام ، نام خانوادگی ، میزان اعتبار و ..) را چاپ کند
    در نهایت یک شی به اسن X از نوع اینترفیس "امور مربوط به چاپ" بسازم و به شی ای از کلاس کارمند منتسب کنم یا به شی ای از کلاس تنخواه منتسب کنم
    از این به بعد هر گاه بگم "چاپ اطلاعات کلی".X خود کامپایلر تشخیص بده که نسبت به کارمند بودن یا تنخواه بودن متد مربوطه را اجرا کند

    در صورتی که این سناریو پاسخ گو مشکل من نیست چون تنخواه گردان ها نوعی از کارمندان هستند پس من لازم دارم هر دو نوع حالت چاپ را داشته باشم {(نام ، نام خانوادگی و...)برای وقتی که به عنوان یک کارمند به تنخواه گردان ها نگاه میشود / و (نام ، نام خانوادگی ، میزان اعتبار و ..) برای مواقعیی که به عنوان یک تنخواه گران به یک کارمند نگاه می شود}

    نکته اول : در ضمن اگه از اصطلاح virtual و override استفاده شده باشد روش گفته شده کارایی ندارد پس من نباید متد "چاپ اطلاعات کلی" را برای کارمندان مجازی تعریف کنم و در تنخواه گردان منسوخ نمایم
    نکته دوم : متد "چاپ اطلاعات کلی" در تعداد پارامتر های ورودی و نوع خروجی در هر دو حالت یکسان میباشد و فقط بدنه متفاوتی دارد

    با تشکر از راهنمایی شما دوست گرامی
    امید وارم از خواندن پست بالا خسته نشده باشد و اگه راهکاری در این زمینه دارید بنده را مشعوف نمایید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •