public class Parent : Monobehaviour
{
Son previous = null;
public void Init()
{
for(int i = 0; i < 10; i++)
{
Son s = new Son();
s.SonSelected += sonSelected;
}
}
public void sonSelected(Son s)
{
if(previous != null) previous.Deselected();
s.Selected();
previous = s;
}
}
public class Son : Monobehaviour
{
public event System.Action<Son> SonSelected;
private void button_click
{
if(SonSelected != null) SonSelected(this);
}
public void Selected()
{
//todo
}
public void Deselected()
{
//todo
}
}
现在我们可以把父类中持有的子节点和子类中声明的事件给提取出来,建立一个泛型类Selection
public delegate void SelectedHandle<T>(Selection<T> self, T oldItem, T newItem) where T : class;
public class Selection<T> where T : class
{
public event SelectedHandle<T> Selected;
private T _item;
public T Item
{
get{ return _item;}
set
{
var oldItem = _item;
_item = value;
if(Selected != null)
Selected(this, oldItem, _item);
//CallSelected(oldItem);
}
}
//private void CallSelected(T oldItem)
//{
//if(Selected != null) Selected(this, oldItem, _item);
//}
}