• C#闭包


    我们想在每个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();
        }
    }

  • 相关阅读:
    学习进度条7
    2016年秋季个人阅读计划
    WampServer中MySQL中文乱码解决
    LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
    人月神话阅读笔记03
    人月神话阅读笔记02
    个人总结
    人月神话阅读笔记01
    学习进度条15
    学习进度14
  • 原文地址:https://www.cnblogs.com/lovebanyi/p/2185404.html
Copyright © 2020-2023  润新知