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

نام تاپیک: ایجاد event در سازنده یک کلاس

  1. #1

    ایجاد event در سازنده یک کلاس

    چگونه میتوان یکevent را در سازنده کلاس طراحی کرد که وقتی یک شی ایجاد شد در message box نمایش دهد که ان ایجاد شده است.

  2. #2
    ببخشید شاید من بد متوجه شدم ولی این چه ربطی به event داره از خود سازنده استفاده کن

  3. #3
    نقل قول نوشته شده توسط soltanc مشاهده تاپیک
    چگونه میتوان یکevent را در سازنده کلاس طراحی کرد که وقتی یک شی ایجاد شد در message box نمایش دهد که ان ایجاد شده است.
    شما نمیتونید یک ایونت هندلر رو به آبجکتی که هنوز ساخته نشده نسبت بدید. دو راهی که فی البداهه به ذهن میرسه :
    1- کلاس کانستراکتری با پارامتر از نوع دیلیگیت داشته باشه. (که اونجا تعیین میشه چه متودی در هنگام ایجاد آبجکت باید اجرا بشه؛ که این دیگه رویداد نمیشه!)
    2- کلاسی با یک رویداد استاتیک

    راه دوم :
    public class MyClass
    {
    public delegate void CreationHandler(object sender, EventArgs e);
    public static event CreationHandler Created;

    private void OnCreate()
    {
    if (Created != null)
    Created(this, new EventArgs());
    }

    public MyClass()
    {
    OnCreate();
    }
    }
    نحوه ی استفاده :
    private void Form1_Load(object sender, EventArgs e)
    {
    MyClass.Created += new MyClass.CreationHandler(MyClass_Created);
    MyClass mc = new MyClass();
    }

    void MyClass_Created(object sender, EventArgs e)
    {
    MessageBox.Show("salam!");
    }
    نقل قول نوشته شده توسط gdevnb مشاهده تاپیک
    ببخشید شاید من بد متوجه شدم ولی این چه ربطی به event داره از خود سازنده استفاده کن
    ایشون میخوان کاربر استفاده کننده از کلاس - بدون نیاز به دسترسی به کانستراکتر کلاس - تعیین کنند که چه عملیاتی پس از ایجاد یک نمونه باید انجام بشه.
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  4. #4

  5. #5
    نقل قول نوشته شده توسط bermooda مشاهده تاپیک
    خوب هر کدی که تو سازنده بنویسی موقع ایجاد یک نمونه از آن کلاس اون کدها اجرا خواهند شد (در اینجا نشون دادن یک Mbox)
    درسته، اما :
    1- این تعریف یک رویداد نیست
    2- فکر میکنم شما سازنده و مصرف کننده ی کلاس رو یکنفر فرض کردید.

    حالا فرض کنید من قراره از اسمبلی شما استفاده کنم و وقتی یکی از کلاسهای شما رو instantiate کردم باید یک رویداد تحریک بشه؛ خب من به سورس کلاس شما دسترسی ندارم و نمیتونم کد دلخواه خودم رو - در زمان تحریک - به کانستراکتر اون تزریق کنم.
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  6. #6

  7. #7

    ایجاد event در سازنده کلاس 2

    sinpin:
    ممنون از راهنمایی شما.
    راه اول با یک مثال توضیح بدین.
    راه دوم شما یه مشکل داره:اینکه اگر بجای لود فرم از کلیک یک دکمه استفاده کنیم برنامه اجرا میشه اما از نظر منطقی ایراد داره:
    اگه بار اول دکمه رو کلیک کنید پیام رو نشون میده اگه بار دوم دکمه رو کلیک کنید پیام رو 2بار نشون میده الی ...
    درصورتی که ما می خواهیم با هر بار کلیک شدن فقط یکبار پیام بده.
    یک سوالی اینجا پیش میاد که event هم مثل شی طول حیات داره و از بین میره؟
    در ضمن این دو خط را ملاحظه نمایید:
    MyClass.Created += new MyClass.CreationHandler(MyClass_Created);
    MyClass mc = new MyClass();
    در خط 1 شما event رو برای خود کلاس تعریف کردید نه برای شی mc
    در صورتی که می خواستیم هنگامی که یک شی ساخته میشه یک event
    آزاد بشه.اصلا روی شی mc این event تعریف نشده است.(چون استاتیک هست)
    یک کمی اگر بخواهیم همین برنامه شما رو پیچیده کنید خودمون یک کلاس event بسازیم و از آن در برنامه استفاده کنیم.
    bermooda:از شما نیز ممنونم.
    gdevnb:توضیحات کامل دادم تا این دفعه شما هم متوجه بشید.
    در ضمن فایل رو هم ضمیمه کردم.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله soltanc : شنبه 17 فروردین 1387 در 02:35 صبح

  8. #8
    delegate string StrMod(string str);

    class c1
    {
    public c1(StrMod sm)
    {
    //...
    sm("str");
    }
    }
    class c2
    {
    static string replaceSpaces(string a)
    {
    return a;
    }

    public static void Mainx()
    {
    StrMod strOp = new StrMod(replaceSpaces);
    c1 x = new c1(strOp);
    }
    }

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

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