PDA

View Full Version : رویداد ها در کلاس



barnamenevis300
چهارشنبه 21 تیر 1391, 15:18 عصر
میدانم که در اعضای یک کلاس میتونه تابع، داده هایی از نوع های معمولی و یا از نوع اشیائی از کلاس های دیگه باشه... حالا اخیرا متوجه شدم کلاس ها در سی شارپ میتونن عضوی داشته باشن از جنس "رویداد".
این چطور ممکنه؟ مثلا من چطور میتونم یه کلاسی خودم ایجاد کنم که یک عضوی داشته باشه که جنسش رویداد باشه؟

لطفا در مورد ماهیت رویدادها که عضوی از کلاس ها هستن توضیح بدید و اینکه آیا برنامه نویس قادر به ایجاد رویداد در یک کلاسی که خودش ایجاد میکنه هست؟

the king
چهارشنبه 21 تیر 1391, 16:31 عصر
میدانم که در اعضای یک کلاس میتونه تابع، داده هایی از نوع های معمولی و یا از نوع اشیائی از کلاس های دیگه باشه... حالا اخیرا متوجه شدم کلاس ها در سی شارپ میتونن عضوی داشته باشن از جنس "رویداد".
این چطور ممکنه؟ مثلا من چطور میتونم یه کلاسی خودم ایجاد کنم که یک عضوی داشته باشه که جنسش رویداد باشه؟

لطفا در مورد ماهیت رویدادها که عضوی از کلاس ها هستن توضیح بدید و اینکه آیا برنامه نویس قادر به ایجاد رویداد در یک کلاسی که خودش ایجاد میکنه هست؟

فرضا یک کلاس داریم :

class Class1
{
public void Test()
{
Random rnd = new Random();
int n = rnd.Next(2);
}
}


بهش یک رخداد اضافه می کنیم که اگه عدد تصادفی n برابر 1 شد، رخدادی به اسم Hello رو فراخوانی کنه :

class Class1
{
public event EventHandler Hello;

public void Test()
{
Random rnd = new Random();
int n = rnd.Next(2);
if (n == 1)
{
EventHandler handle = this.Hello;
if (handle != null)
{
handle.Invoke(this, EventArgs.Empty);
}
}
}
}


و فرضا در جایی دیگه این کلاس رو بکار می بریم و برای رخداد Hello اش کدی می نویسیم تا پیغامی رو نشون بده :

Class1 c1 = new Class1();

private void Form1_Load(object sender, EventArgs e)
{
c1.Hello += new EventHandler(c1_Hello);
c1.Test();
}

void c1_Hello(object sender, EventArgs e)
{
MessageBox.Show("Hello!");
}


می توانید برای رخداد هایتان پارامتر در نظر بگیرید، اول یک کلاسی بسازید که از EventArgs ارث بری کنه :

public class MyEventArgs : EventArgs
{
public string Name, Telephone;

public MyEventArgs(string name, string telephone)
{
Telephone = telephone;
Name = name;
}
}

public event EventHandler<MyEventArgs> Cool;


بعد رخداد رو به همون شیوه مشابه ولی اینبار با مقدار پارامتر های دلخواه تان فراخوانی کنید :

EventHandler<MyEventArgs> handle = this.Cool;
if (handle != null)
{
handle.Invoke(this, new MyEventArgs("ali", "1234567"));
}


رخداد Cool این کلاس موقع استفاده اینطوری میشه :

private void Form1_Load(object sender, EventArgs e)
{
c1.Cool += new EventHandler<Class1.MyEventArgs>(c1_Cool);
}

void c1_Cool(object sender, Class1.MyEventArgs e)
{
MessageBox.Show(e.Name + " " + e.Telephone);
}

barnamenevis300
چهارشنبه 21 تیر 1391, 20:10 عصر
وقتی یک چیزی رو تعریف میکنیم مثلا:
public void main
عباراتی مثل public اینا یه معنای بخصوصی دارن حالا من چیزی میخوندم در مورد delegate بود فکر کنم به رویداد ها ربط داره اگه میشه راجع به اینها هم توضیح بدید ممنون میشم. که کار عبارت delegate چیه؟

gwbasic
چهارشنبه 21 تیر 1391, 20:38 عصر
درود بر شما
سوالاتی که شما مطرح می کنید همه مبانی و مفاهیم اولیه هستند که هر کتابی رو مطالعه کنید این مطالب موجودند. پیشنهاد می کنیم اول مطالعه کنید چون اینطور مطرح کردن سوالاتتون هم وقت زیادی از شما تلف میشه تا جواب بگیرن و ممکنه نتیجه مد نظر شما هم در نهایت حاصل نشه ولی کتاب اینچنین نیست
در نهایت اگر کافی نبود می تونید برای این مفاهیم با یه سرچ کوچیک تو سایت کلی مطلب پیدا کنید

barnamenevis300
چهارشنبه 21 تیر 1391, 23:03 عصر
سوالاتی که شما مطرح می کنید همه مبانی و مفاهیم اولیه هستند که هر کتابی رو مطالعه کنید این مطالب موجودند. پیشنهاد می کنیم اول مطالعه کنید چون اینطور مطرح کردن سوالاتتون هم وقت زیادی از شما تلف میشه تا جواب بگیرن و ممکنه نتیجه مد نظر شما هم در نهایت حاصل نشه ولی کتاب اینچنین نیست

بخاطر پیشنهادتون ممنون و دقیقا میدونم چی میفرمایید ولی باور کنید این روش برای "هدف" من پر بازده تر هست تا مطالعه منابع. هر چند در نهایت از این سرنخ ها استفاده میکنم برای مطالعه بهتر منابع در آینده.
من با چند تا سوال ساده راجع به سی شارپ به ماهیتش تقریبا پی بردم و حالا میتونم ارزیابی کنم که خوندن یه کتاب هزارو پانصد صفحه ایی که تازه مقدمات سی شارپ رو توضیح داده مقرون به صرفه هست یا نه!

ای کاش در باره delegate هم یه کوچولو توضیح میدادید :ناراحت:

mmd2009
چهارشنبه 21 تیر 1391, 23:10 عصر
ای کاش در باره delegate هم یه کوچولو توضیح میدادید :ناراحت:

باسلام

امضای اقای gwbasic (http://barnamenevis.org/member.php?25140-gwbasic) رو مشاهده کنید. لینک های اموزشهای ایشون اونجا هستند. در مورد delegateهم توضیح دادند

موفق باشید

vahiid
دوشنبه 18 دی 1391, 00:52 صبح
با سلام
میخواستم بدونم میشه رویدادهایی مثل KeyDown و یا KeyPress از کلاس Datagridview در یک کلاس دیگری ایجاد کرد