💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ حمیدرضا جلیلی
عملکرد state و this
جامعه ASP.NET ایجاد شده در ۱۱ دی ۱۴۰۱
in program.cs
 while (true)
            {
                int input = Int32.Parse(Console.ReadLine());
                subject.Update(input);
            }
----------------------------------
class subject
public void Update(int state)
        {
            State = state;
            
            foreach (var observer in observers)
               observer.update(this);
        }
-----------------------------------
    
in class observer
  public void update(ISubject subject)
        {
            Console.WriteLine(" subject state changed to " + subject.State);
        } 
  •    کد بالا در این برنامه به ترتیب یک ورودی از کاربر میگیرد و کلاس subject را فراخوانی میکند و با همان عدد ورودی به متد update در کلاس subject میرود و عددی که از کاربر گرفته را داخل متغیر State میریزد و سپس داخل لیست observer‌ها رفته و هرچند تا که هست را در کلاس observer فراخوانی میکند و متد update را فراخوانی میکند در همان کلاس سوال من در اینجا :
  • 1- عملکرد و مفهوم this است که با متد update فراخوانی مشود
  • 2- فیلد state در اینجا چه عملکردی داشت ؟
  • تشکر

سلام،

this به آبجکتی که در حین اجرا از کلاس Subject ساخته میشه اشاره میکنه.(کلمه کلیدی this داخل کلاس به خود کلاس اشاره میکنه)

مثال:

class Student {
   public int id, age;  
   public String name, subject;
   public Student(int id, String name, int age, String subject) {
      this.id = id;
      this.name = name;
      this.subject = subject;
      this.age = age;
   }
}

چون پارامترها و فیلدها همنام هستن از this استفاده شده اما اگر اسامی همنام نبودن نیازی به استفاده از this نبود.

در این مثال this به Student اشاره میکنه.(در واقع this اشاره به آبجکتی که new شده از کلاس Student اشاره میکنه)


سؤال دومتون، داخل متد Update فیلد State مرتبط با آبجکتی که new شده مقدار دهی میشه و در ادامه کد وقتی حلقه اجرا میشه داخل حلقه متد update از observer صدا زده میشه که داخلش فیلد State فراخوانی شده(داخل WriteLine) و این مقداری که در خروجی چاپ میشه قبلتر داخل متد Update از subject مقدار دهی شده بود.

بهترین پاسخ
محسن موحد ۱۱ دی ۱۴۰۱، ۱۹:۲۷

خیلی عالی تشکر

حمیدرضا جلیلی ۱۳ دی ۱۴۰۱، ۰۷:۳۰