关闭

C#中代理机制练习

标签: C#代理机制
356人阅读 评论(0) 收藏 举报
分类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace DelegateDemo01
{
    class BubbleSorter
    {
        public static void Sort<T>(IList<T> sortArray,Func<T,T,bool>comarison){
            bool swapped = true;
            do{
                swapped = false;
                for (int i = 0; i < sortArray.Count - 1;i++ ) {
                if(comarison(sortArray[i+1],sortArray[i])){
                    T temp = sortArray[i];
                    sortArray[i] = sortArray[i + 1];
                    sortArray[i + 1] = temp;
                    swapped = true;
                }
                }
            }while(swapped);
        
        }
    }

}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace DelegateDemo01
{
    class Employee
    {
        //字段
        private string name;
        private decimal salary;
        //封装属性
        public string Name {
            get {
                return name;
            }
           private set {
                name = value;
            }
        }
        public decimal Salary {
            get {
                return salary;
            }
         private set {
                salary = value;
            }
        }
        //构造方法
        public Employee() { }
        public Employee(string name,decimal salary) {
            this.name = name;
            this.salary = salary;
        }
        //重写父类的ToString 方法
        public override string ToString()
        {
            return string.Format("{0},{1:c}",Name,Salary);
        }
        //自定义比较方法
        public static bool CompareSalary(Employee e1,Employee e2) {
            return e1.Salary < e2.Salary;
        }


    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace DelegateDemo01
{
    class Program
    {
       //定义委托类型。没有方法体
        private delegate string GetString();
        delegate double DoubleOp(double x);
        //实例化委托类型,作为参数传入方法中
        static void ProcessAndDisplayNumber(DoubleOp action,double value) {
            double result = action(value);
            Console.WriteLine("Value is {0},result of operation is {1}",value,result);
        
        }
        static void Main(string[] args)
        {
            int x = 20;
            //实例化委托类型,传入方法参数
            GetString getstr = new GetString(x.ToString);
            Console.WriteLine("委托结果:"+getstr());


            //委托数组使用
            DoubleOp[] doubleop = { 
                                  MathOperation.MultiplyByTwo,
                                  MathOperation.Square
                                  };


            for (int i = 0; i < doubleop.Length;i++ ) {
                Console.WriteLine("Using operations {0}:",i);
                ProcessAndDisplayNumber(doubleop[i],2.0);
                ProcessAndDisplayNumber(doubleop[i],3.45);
                ProcessAndDisplayNumber(doubleop[i],445.23);
                Console.WriteLine();
            
            }


            //委托的经典使用,冒泡排序
            Employee[] employee = { 
                                 new Employee("zhangsan",22222),
                                 new Employee("lisi",33212),
                                 new Employee("wanger",23444),
                                 new Employee("wanghai",33221)                                 
                                  };
            BubbleSorter.Sort(employee,Employee.CompareSalary);
            foreach(Employee em in employee){
                Console.WriteLine(em);
            }
            Console.ReadKey();
        }
    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:85981次
    • 积分:1537
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:35篇
    • 译文:1篇
    • 评论:5条
    最新评论