zoukankan      html  css  js  c++  java
  • 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();
        }
    }

  • 相关阅读:
    正则表达式
    9.4、分布式进程
    Linux文件编辑工具——VIM
    14 Linux网络管理
    13.Linux系统服务
    12.Linux进程管理
    11.Linux磁盘管理——lvm,raid
    10.Linux磁盘管理
    09.Linux软件包管理——(YUM 、RPM)
    07.Linux 压缩打包
  • 原文地址:https://www.cnblogs.com/lovebanyi/p/2185404.html
Copyright © 2011-2022 走看看