委托的学习(2)

               嘿嘿,“如果别人朝你扔石头,就不要扔回去,留着做你建高楼的基石”,我知道自己喜欢程序,甚至是说喜欢.net,所以我选择了学习,今天的一切无论是打击也好,鼓励也罢,我都感谢在我博客留言的每一位友友,是你们让我重新清醒,同时也让我再次经受考验,或许走在社会上的您们已经习惯了被打击和被鼓励,而对于我们这些还未踏进社会的学生们说一切还都是未知数,我想如果我就凭着几位友友来打击我,我就告别了这里,那我只能说我是一个软弱者,这个社会未来也是不可能让我成长的,无论今天您们说了什么,我都感谢您,我会永远带着积极地态度在这里成长,在这里丰富自己的知识,我相信无论未来怎样,我都会有一种平和的心态面对,错啦我会改正,您的建议永远是我进步的阶梯。我会收起您厌恶的那些点滴,仍然保持一个阳光的自我。我想:其实每一个人没必要刻意做些什么的,而且是来求知的,又是何必那?

         下面就总结一下今天我学习的一些内容吧,前几天在学习委托,只是初步的总结一点,这个是前面总结的(http://www.cnblogs.com/dyxd/p/4176105.html),下面接下来在总结一些。

          一.求任意类型的最大值  

           1.int类型和引用类型person的数组

复制代码
/// <summary>
    /// 如果 n1 > n2 返回大于0的数
    /// 如果 n1 < n2 返回小于0的数
    /// 如果 n1 == n2  返回0
    /// </summary>
    /// <param name="n1"></param>
    /// <param name="n2"></param>
    /// <returns></returns>
    delegate int DelCompare(object n1,object n2); 
复制代码
复制代码
class Program
    {
        static void Main(string[] args)
        {
            #region 定义int类型的数组
            //object[] array = { 1, 2, 3, 4, 5, 6 };          //定义一个int类型的数组
            //object max = GetMax(array, CompareInt);
            //Console.WriteLine(max);
            //Console.ReadKey();

            object[] array =
                {
                      new  Person("张三",10),
                      new  Person("李四",11),
                      new  Person("王五",12)
                };
            object o = GetMax(array, ComparePerson);
            Console.WriteLine(o);
        }
        //static int CompareInt(object n1, object n2)            //在这里方法主要是转换类型以及返回值类型
        //{
        //    int a1 = Convert.ToInt32(n1);
        //    int a2 = Convert.ToInt32(n2);
        //    return a1 - a2;
        //}
        static int ComparePerson(object o1, object o2)
        {
            Person p1 = o1 as Person;
            Person p2 = o2 as Person;
            return p1.Age - p2.Age;
        }
            #endregion
        static object GetMax(object[] array,DelCompare del)
        {
            object max=array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (del(max, array[0]) < 0)   //通过调用委托的方法,在这里委托时含有两个object类型的参数
                {
                     max=array[i];
                }
            }
            return max;
        }
    }
复制代码

               

             在这里我们定义一个object类型的数组,所以我们在定义委托时间一定要注意需要传参时间的类型,这里需要的参数的类型是object类型,由于它是需要传一个方法,而这个方法的参数是一个object类型,所以我们考虑到委托的参数应该是object类型,而在委托的返回类型上面也是需要注意的,当有两种情况时间可以使用bool类型,而三种情况则需要选择int类型,在代码中有注释的;还有就是记得转换类型,这里是根据我们定义的数组类型来决定的。

                    二.方法FindAll的使用

复制代码
    class Person
    {
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
复制代码
复制代码
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person("张三",15));
            persons.Add(new Person("李四",20));
            persons.Add(new Person("王五",21));
            persons.Add(new Person("赵六", 14));

              //persons.RemoveAll(Compare);
              //Predicate<Person> pre = new Predicate<Person>(Compare);
              //List<Person> list = persons.FindAll(pre);

           for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i].Name);
            }
            Console.Read();
            }
           static bool Compare(Person p)
            {
            if (p.Age < 20)
            {
               return true;
            }
            else
            {
                return false;
            }
        }
    }
复制代码

 

                在这里使用的是FindALL方法,而FindAll的参数是一个委托,嘿嘿,所以我们需要一个方法,在这里是使用的是比较大小,所以我们可以给它一个compare的方法。

           嘿嘿,今天就写到这里,委托刚开始学习感觉没有那样的难以理解,但是做起来题却是迷茫,现在学习的多就不会在感觉不知道怎样思考怎样做。所以想要更好的掌握一种方法还是要选择更多的练习,这可能是最笨的方法,但是却是最好的选择吧。

posted @   雪?  阅读(1236)  评论(15编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示