A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 该死的温柔 于 2014-5-17 21:21 编辑

求用最简单明了的话解释下,能拿出例子更好,,拜托各位精英了!!!

7 个回复

倒序浏览
委托我理解的是,,,,让别人去给自己办事?比如说有一个类A,我是类B,当我要用到A中一个方法时,NEW一个A的小对象,就相当于委托A去帮我完成了工作
回复 使用道具 举报
赵洋洋 发表于 2014-5-17 18:23
委托我理解的是,,,,让别人去给自己办事?比如说有一个类A,我是类B,当我要用到A中一个方法时,NEW一个A的小对 ...

概念我知道,能拿出具体的代码吗?具体的使用
回复 使用道具 举报
你等会儿,,我给你找找
回复 使用道具 举报
  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  2.                 //设置输出内容类型
  3.                 response.setContentType("text/html;charset=utf-8");       

  4.                 //获取out输出对象
  5.                 PrintWriter out = response.getWriter();               

  6.                 //获取session对象
  7.             HttpSession session = request.getSession();       

  8.             //组合
  9.             UserService userService = new UserServiceImpl();
  10.             
  11.                 request.setCharacterEncoding("utf-8");

  12.                 String username = request.getParameter("username");
  13.                 String password = request.getParameter("password");
  14.                
  15.                 if(!"".equals(username) &&!"".equals(password)){
  16.                
  17.                         //委托
  18.                         User user = userService.login(username, password);
  19.                        
  20.                         if(user != null){
  21.                                                
  22.                                 //记录session属性
  23.                                 session.setAttribute("user", user);

  24.                                 //跳到主页
  25.                                 //response.sendRedirect("index.jsp");

  26.                                 //跳到主页的Servlet
  27.                                 //response.sendRedirect("IndexServlet");
  28.                                
  29.                                 //跳到主页的Servlet,只显示第一页数据
  30.                                 response.sendRedirect("IndexServlet?currentPage=1");
  31.                                
  32.                         }
  33.                 }               
  34.         }

  35. }
复制代码
回复 使用道具 举报
1.委托

  委托是一种类型,是方法的类型,委托定义了方法的类型;这样就能把方法作为参数进行传递。


2.委托链

  将多个方法捆绑到同一个委托对象上,形成委托链,当调用这个委托对象时,将依次调用委托链中的方法。

【区别很明显了吧】




-----------委托
代码

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->namespace First
{
    //定义委托,它定义了可以代表方法的类型
    public delegate void GreetingDelegate(string name);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name); //此句的意思是将name传递给方法MakeGreeting
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //将方法EnglishGreeting作为一个参数传递
            //对应到GreetPeople中,是将"KIMI"传递给了EnglishGreeting
            GreetPeople("KIMI", EnglishGreeting);
            //将方法ChineseGreeting作为一个参数传递
            //对应到GreetPeople中,是将"莱科宁"传递给了ChineseGreeting
            GreetPeople("莱科宁", ChineseGreeting);
        }

        //此处函数的签名必须和委托GreetingDelegate(string name)一致
        private void EnglishGreeting(string name)
        {
            MessageBox.Show("Morning, " + name);
        }
        private void ChineseGreeting(string name)
        {
            MessageBox.Show("早上好," + name);
        }
    }
}




===委托连
代码

//定义委托,它定义了可以代表方法的类型
    public delegate void GreetingDelegate(string name);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name); //此句的意思是将name传递给方法MakeGreeting
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //将方法EnglishGreeting作为一个参数传递
            //对应到GreetPeople中,是将"KIMI"传递给了EnglishGreeting
            //GreetPeople("KIMI", EnglishGreeting);
            //将方法ChineseGreeting作为一个参数传递
            //对应到GreetPeople中,是将"莱科宁"传递给了ChineseGreeting
            //GreetPeople("莱科宁", ChineseGreeting);
            GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
            //delegate1 = ChineseGreeting;
            delegate1 += ChineseGreeting;
            //delegate1 += EnglishGreeting;
            delegate1("KIMI");
        }

        //此处函数的签名必须和委托GreetingDelegate(string name)一致
        private void EnglishGreeting(string name)
        {
            MessageBox.Show("Morning, " + name);
        }
        private void ChineseGreeting(string name)
        {
            MessageBox.Show("早上好," + name);
        }
    }




===========委托和指针

C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的
  函数指针就是指向函数入口的指针。虽然每个函数不是变量,但是在内存中,函数也占有相应的物理地址,函数指针就是指向该函数的入口地址的



回复 使用道具 举报 1 0
方杰斌 发表于 2014-5-17 20:08
1.委托

  委托是一种类型,是方法的类型,委托定义了方法的类型;这样就能把方法作为参数进行传递。

明白了,谢了!!!!
回复 使用道具 举报

public class Class1
    {
        /// <summary>
        /// 委托类型
        /// </summary>
        /// <param name="ismove">是否向下执行的标识</param>
        public delegate void Print(ref string ismove);
        /// <summary>
        /// 委托实例
        /// </summary>
        Print p;
        /// <summary>
        ///默认构造函数
        /// </summary>
        public Class1()
        {
            //添加四个方法
            Print p = new Print(method1);//第一个方法用来实例化委托第一个实例
            p += method2;
            p += method3;
            p += method4;
        }
        /// <summary>
        /// 开始执行委托链
        /// </summary>
        /// <returns></returns>
        public string run()
        {
            string ismove = "yes";
            p(ref ismove);
            return ismove;
        }
        public void method1(ref string ismove)
        {
            if (ismove == "yes")//判断是否要继续向下执行
            {

            }
        }
       public void method2(ref string ismove)
        {
            if (ismove == "yes")//判断是否要继续向下执行
            {
                //我这里执行出了问题,不想继续向下执行了
                ismove = "no";//后面的所有方法都不会执行
            }
        }

        public void method3(ref string ismove)
        {
            if (ismove == "yes")//判断是否要继续向下执行
            {

            }
        }
        public void method4(ref string ismove)
        {
            if (ismove == "yes")//判断是否要继续向下执行
            {

            }
        }


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马