C#中代理机制练习

原创 2013年12月03日 21:33:16
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();
        }
    }
}

C# 委托 例子

一个很经典的学习C# 委托的例子跟大家分享一下,希望对大家有点帮助,直接看代码:...
  • ruiqi317
  • ruiqi317
  • 2011年06月23日 18:02
  • 315

java 动态代理机制的理解和分析

引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执...
  • Leonardo9029
  • Leonardo9029
  • 2016年03月28日 10:22
  • 3526

Spring AOP与事务代理机制

 Spring AOP与事务代理机制Spring提供了TransactionProxyFactoryBean作为动态代理的生成工厂,该工厂产生目标bean的动态AOP事务代理。事务代理根据所配置的事务...
  • thunder09
  • thunder09
  • 2009年11月16日 02:00
  • 3841

C#面向对象编程练习

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • lucky51222
  • lucky51222
  • 2015年05月29日 20:15
  • 2144

理解C#中的代理和事件(一)

解C#中的代理和事件(一)  突然写这篇文章,真的有点,是在做作的感觉,我想这并不是什么,难以理解的东西,事实上,很多人都写过,而且,我保证至少不比我写的差.可是还是觉得有必要提出来.因为要去正确的理...
  • yarshray
  • yarshray
  • 2002年12月31日 09:35
  • 1170

C#中的数组操作练习

using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp...
  • skyheroleon
  • skyheroleon
  • 2015年06月17日 14:38
  • 202

C#委托与代理模式

在设计模式的学习过程中,委托是一个不容易理解的知识点。尤其是在学完代理模式之后,就更不知道什么是什么了。下面分别看一下各自的实例,来看一下这两者有什么区别。       委托是一种引用方法的类型。...
  • zc474235918
  • zc474235918
  • 2014年03月09日 11:13
  • 3417

C#的委托与java的代理

C#中的委托和JAVA的代理激烈
  • BigWatermelon11
  • BigWatermelon11
  • 2016年11月17日 16:40
  • 1128

IO(C#) 读写文件简单操作

首先我们有这格式的一个记事本 学号    数学    语文     英语 001    80  90  100 002    90  90  100 003    70  80    0...
  • gongzhe2011
  • gongzhe2011
  • 2014年05月28日 17:04
  • 630

Unity3D 利用C#实现简单的代理模式Delegate(委托)

Ref: http://www.cnblogs.com/shadow7/p/5892641.html 1、Delegate是什么? Delegate中文翻译为“委托”。 C#语言是支...
  • xlx921027
  • xlx921027
  • 2017年02月26日 00:02
  • 760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中代理机制练习
举报原因:
原因补充:

(最多只允许输入30个字)