委托

什么时候用委托?委托有什么用?

当一个类型和总需要潜入一段代码,这段代码具有不确定性,那就用委托来占位,在我们在实际操作中要用到这段代码的时候再定义具体的方法,并将这个方法传递给这个委托,那么这个委托就会调用这个方法。

在空间中的时间会大量的使用委托。因为对于某一个控件的触发,在写控件的时候,是不知道这个触发到底要引发怎样的方法,所以需要一个方法的变量(委托)来占位,到时候具体有什么动作(即方法的具体实施过程)需要由程序员来定义,这就是委托最好的并且广泛使用的一个案例。

呼。我想我讲的不明白,推荐参考

http://www.cnblogs.com/zhili/archive/2012/10/22/Delegate.html

这里面关于现实中的律师的委托例子还是比较通俗的。而用C++中的函数指针来类比委托在《C#图解教程》中也有所耳闻,可能C++学的不好,所以觉得更是画蛇添足之笔。

访问修饰符是面向对象的一些概念,并不是说添加了private等修饰符其他类就访问不到了。比如说,利用委托就可以访问再另一个类中的私有的方法。

比如一个简单的例子:

1、在一个文件中创建一个类:


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

namespace _20120609委托实验
{
class Class1
{
//下面已经用了MuJi的方法了,那得声明一下啊
public MyDelegate MuJi;

private void SayHello()
{
Console.WriteLine("=============================");
Console.WriteLine("=============================");
//这儿我自己也不知道要进行什么处理,那么先占个位置吧
MuJi();
Console.WriteLine("=============================");
Console.WriteLine("=============================");
Console.ReadKey();
}
}
}

2、主程序的文件如下


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

namespace _20120609委托实验
{
class Program
{
static void Main(string[] args)
{
//在这儿我想调用类Class1了,创建一个Class1的对象
Class1 c1 = new Class1();
//在Class1中的MuJi是在private中,可是我在这儿访问到了,还他妈的给他定义了方法体
c1.MuJi = YiJi;

}

//具体的方法
private static void YiJi()
{
Console.WriteLine("我知道我想在这儿干什么了,我就是想输出这些东西");
}
}
}

由于死耍帅,在Class1中SayHello()在mian()中是不能调用的,所以,在main()中不能用c1.SayHello()

可以把静态方法或者私有方法赋值给委托变量,赋值后,只要能使用到该委托变量的地方就能使用该方法。打破了访问修饰符的限制。

时间: 2024-11-10 11:22:59

委托的相关文章

c#系统泛型委托

Action<T> 无返回值的系统泛型委托 namespace ConsoleApp1 { public class UserInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Program { private static List<UserInfo> getInit() { return new List<User

《C#图解教程》读书笔记之五:委托和事件

本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执行它所"持有"的方法.如果从C++的角度来理解委托,可以将其理解为一个类型安全的.面向对象的函数指针. (2)如何使用委托? ①声明委托类型(delegate关键字) ②使用该委托类型声明一个委托变量 ③为委托类型增加方法 ④调用委托执行方法 (3)委托的恒定性: 组合委托.为委托+=增加

C# 委托,Lambda表达式,事件

本文章参考sikiC#高级篇,转载请注明出处. 什么是委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托与使用 声明委托有四种方式.一种是原生的,另外三种是C#为了方便给我们封装好的. 四种声明方式分别为delegate, Action, Func, 在C#中使用一个类分为两个阶段,首先定义这个类,告诉编译器这个类由什么字段和方法组成,然后使用这个类实例化对象.在我们使用委托的时候,也需要经过这两个阶段,首先定义委托,告诉编

泛型委托当参数传递

假如有一个Person类: public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Title { get; set; } } 执行一个方法: /// <summary> /// 传递一个泛型委托方法 /// </summary> /// <param name="acti

类库,委托,is和as运算符,泛型集合

类库:其实就是一堆类文件,只不过用户看不到这些类的源代码,保密性好. 优点:保密性好缺点:如果这个方法不好用,使用者无法自己去更改它. 类文件是.cs    类库是.dll 新建项目为类库,在debug文件夹下找到dll文件 委托:委托可以理解为:函数的指针 关键词:delegate 声明委托类型:public delegate int FirstDel(int a, int b); FirstDel不是类,是委托变量,不能实例化(不能new), 创建委托变量:FirstDel 名字 = 与这个

泛型委托

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型委托 { public delegate int DelCompare<T>(T t1, T t2); // public delegate int DelCompare(object o1, object o2); class Progra

javascript中的事件委托

这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是撤出了我们的事件冒泡和捕获机制,以及事件委托机制,对于上边这些,我们慢慢来看. 首先说一下事件冒泡和事件捕获机制,事件冒泡是有微软公司提出来的,事件捕获是有网景公司提出来的,当时两家是争论的不可开交,后来w3c也没办法,就采取了折中的方式,事件产生后先捕获后冒泡, 通常,在js中监听事件的方法共有三

[JS]笔记14之事件委托

-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这些就是事件 委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

事件委托能够优化js性能

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>面试题练习img居中</title> <style type="text/css"> img { /*display: table-cell; vertical-align: middle;*/ } html,body{ height: 100%; } div{ w

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等