PDA

View Full Version : سوال: نحوه استفاده از event و indexer در interface و پیاده سازی آنها در کلاس



hmahdavi921
یک شنبه 18 مرداد 1394, 07:20 صبح
با سلام
دوستان کسی میتونه راجع به استفاده از event , indexer در واسط ها توضیح بده که چه کاربردی میتونن داشته باشن ونحوه پیاده سازی شون در کلاس چه جوریه؟
با تشکر

مهرداد صفا
یک شنبه 18 مرداد 1394, 16:00 عصر
سلام.
indexer ها که به طور معمول استفاده می شوند. کاربردشون هم که مثل سایر عناصر و اعضای interface برای تعریف یک ساختار و قالب مشخص و در عین حال پیاده سازی polymorphism در برنامست. مثل System.Collections.IList که در اکثر Collection ها در .NET پیاده سازی شده.
رویدادها رو کمتر دیدم استفاده بشن.
برای پیاده سازیشون باید یک رویداد در سطح کلاس داشته باشید و داخل Event accesser های رویداد اصلی مقدار دهیشون کنید. در مثال زیر روشنه:


//بسم الله الرحمن الرحیم
//اللهم صل علی محمد و آل محمد

using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsFormsApplication1
{

public delegate void ItemChangedEventHandler(object sender, ItemChangedEventArgs E);
public class ItemChangedEventArgs : EventArgs
{
private object oldValue = null;
public object OldValue { get { return oldValue; } }

private object newValue = null;
public object NewValue { get { return newValue; } }

public ItemChangedEventArgs(object oldValue, object newValue)
{
this.oldValue = oldValue;
this.newValue = newValue;

}
}

public interface Interface1
{
event ItemChangedEventHandler ItemChanged;

object this[int inde]
{
get;
set;
}
}

public class Test : Interface1
{
private event ItemChangedEventHandler _itemChanged;
event ItemChangedEventHandler Interface1.ItemChanged
{
add
{
_itemChanged += value;

}
remove
{
_itemChanged -= value;
}
}
int[] items = new int[] { 1, 2, 3 };

object Interface1.this[int index]
{
get
{
return items[index];
}
set
{
var temp = items[index];
items[index] = (int)value;
if(this._itemChanged!=null)
this._itemChanged(this,new ItemChangedEventArgs(temp,value));
}
}
}
}

سیدسبحان
سه شنبه 11 خرداد 1395, 15:34 عصر
تشکر ممنون