• C#_delegate


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    //如果账户金额小于0 触发事件
    
    namespace Starter
    {
        public enum Comparison
        {
            theFirstComesFirst = 1,
            theSecondComesFirst = 2
        }
    
        //包含两项的简单集合
        public class Pair<T>
        {
            //存放两个对象的私有数组
            private T[] thePair = new T[2];
            //委托声明
            public delegate Comparison WhichIsFirst(T obj1, T obj2);
            //构造方法,参数为两个对象,按接收顺序添加
            public Pair(T firstObject, T secondObject)
            {
                thePair[0] = firstObject;
                thePair[1] = secondObject;
            }
    
            //公共方法,按对象具体顺序范畴排序
            public void Sort(WhichIsFirst theDelegatedFunc)
            {
                if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theSecondComesFirst)
                {
                    T temp = thePair[0];
                    thePair[0] = thePair[1];
                    thePair[1] = temp;
                }
            }
    
            //反序排列
            public void ReverSort(WhichIsFirst theDelegatedFunc)
            {
                if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theFirstComesFirst)
                {
                    T temp = thePair[0];
                    thePair[0] = thePair[1];
                    thePair[1] = temp;
                }
            }
    
            //要求两个对象提供字符串值
            public override string ToString()
            {
                return thePair[0].ToString() + ", " + thePair[1].ToString();
            }
        }
    
        public class Dog
        {
            private int weight;
    
            public Dog(int weight)
            {
                this.weight = weight;
            }
    
            public static Comparison WhichDogComesFirst(Dog d1,Dog d2)
            {
                return d1.weight > d2.weight ?
                    Comparison.theSecondComesFirst : Comparison.theFirstComesFirst;
            }
    
            public override string ToString()
            {
                return weight.ToString();
            }
        }
    
        public class Student
        {
            private string name;
    
            public Student(string name)
            {
                this.name = name;
            }
    
            public static Comparison WhichStudentComesFirst(Student s1, Student s2)
            {
                return (String.Compare(s1.name, s2.name)<0 ?
                    Comparison.theFirstComesFirst : Comparison.theSecondComesFirst
                    );
                    
            }
    
            public override string ToString()
            {
                return name;
            }
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                Student Jess = new Student("Jess");
                Student Mary = new Student("Mary");
                Dog Milo = new Dog(26);
                Dog Free = new Dog(12);
    
                Pair<Student> studentPair = new Pair<Student>(Jess,Mary);
                Pair<Dog> dogPair = new Pair<Dog>(Milo, Free);
    
                Console.WriteLine("student pair: " + studentPair.ToString());
                Console.WriteLine("dog pair: " + dogPair.ToString());
    
                //Pair下的委托函数 new 出来,Student下的WhichStudentComesFirst绑定到委托函数,参数列表需要相同
                Pair<Student>.WhichIsFirst theStudentDelegate = new Pair<Student>.WhichIsFirst(Student.WhichStudentComesFirst);
    
                Pair<Dog>.WhichIsFirst theDogDelegate = new Pair<Dog>.WhichIsFirst(Dog.WhichDogComesFirst);
    
                studentPair.Sort(theStudentDelegate);
                Console.WriteLine("student after sort: " + studentPair.ToString());
                studentPair.ReverSort(theStudentDelegate);
                Console.WriteLine("student after ReverSort: " + studentPair.ToString());
                Console.ReadLine();
            }
        }
    
    }
    


  • 相关阅读:
    安装openssl后yum不能使用的解决办法
    使用xShell 连接 docker 使用说明
    /usr/bin/ld: cannot find -lcrypto
    Mac包管理神器:Home-brew
    FinalShell远程连接工具推荐
    make编译出错 usr/bin/ld: /data/app/openssl/lib/libcrypto.a(ecs_asn1.o): relocation R_X86_64_PC32 against symbol `ECDSA_SIG_it' can not be used when making a shared object; recompile with -fPIC
    交叉编译环境搭建
    安装Gitlab
    Git的详细使用
    服务器里Centos 7安装KVM,并通过KVM安装Centos 7
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720447.html
Copyright © 2020-2023  润新知