我们想在每个button的action被调用的时候可以正确调用 动物们的吃的动作
于是我们写下如下的代码。 但是可惜的是效果不对 输出来的是
Cat eat Cat eat
什么会这样呢? 不了解也先不管它了, 但是只要将 稍微改一下代码就行了,见底下的注释部分
LinqPaid V1.35.3通过
void Main()
{
List<MockButton> list = new List<MockButton>();
List<IEat> animals = new List<IEat>(){new Dog(),new Cat()};
foreach(var item in animals)
{
MockButton k = new MockButton();
k.Action =delegate(){item.Eat();};
/*更改成
IEat animal =item;
k.Action =delegate(){animal.Eat();};
*/
list.Add(k);
}
foreach(var item in list)
{
item.Action();
}
}
public class MockButton
{
public Action Action;
}
public interface IEat
{
string Name{get;}
void Eat();
}
public class Dog:IEat
{
public string Name{get{return"Dog";}}
public void Eat()
{
(this.Name + " eat").Dump();
}
}
public class Cat:IEat
{
public string Name{get{return"Cat";}}
public void Eat()
{
(this.Name +" eat").Dump();
}
}