c# 委托详解

1.委托声明


2.委托入门实例


namespace ConsoleApplication1
{

public delegate void methodDelegate(string str);
class Program
{
static void Main(string[] args)
{
Student student = new Student();
Teacher teacher = new Teacher("王老师");
methodDelegate methodDelegate1 = new methodDelegate(student.getStudentName);
methodDelegate1 += teacher.getTeacherName; //可以指向不同类中的方法!
//methodDelegate1 += teacher.getClassName; 指向签名不符的方法时提示错误!
methodDelegate1.Invoke("张三");
Console.ReadLine();
}
}

class Student
{
private String name = "";
public Student (String _name)
{
this.name = _name ;
}
public Student() {}
public void getStudentName(String _name)
{
if (this.name != "" )
Console.WriteLine("Student‘s name is {0}", this.name);
else
Console.WriteLine("Student‘s name is {0}", _name);
}
}

class Teacher
{
private String name;
public Teacher(String _name)
{
this.name = _name;
}
public void getTeacherName(String _name)
{
if (this.name != "")
Console.WriteLine("Teacher‘s name is {0}", this.name);
else
Console.WriteLine("Teacher‘s name is {0}", _name);
}
public string getClassName()
{
return "Eanlish";
}
}
}

上面代码中实现对委托的调用

最后将被调用的委托输出

3.委托的实现方式


第一种:常规实现

?





1

2

3

4

5

6

7

8

private
delegate String getAString( string
parament);

        static
void Main(String []args)

        {

            int
temp = 40;

            getAString stringMethod = new
getAString(temp.ToString); //传递temp.ToString调用委托<br>

            Console.WriteLine("String is {0}", stringMethod());  //stringMethod()调用已经接受参数的委托

            Console.ReadLine();

        }

第二种:多播委托

?





1

2

3

getAString stringMethod = new
getAString(temp.ToString);

        stringMethod += temp.ToString;

        stringMethod -= temp.ToString; 

  这种调用之后,按照接受参数的次数,
委托会生成一个列表,每用+=调用一次,会增加一个列表项,-=调用一次,会移除一个列表项。

第三种:委托数组

当我们定义委托
让委托形成一个数组的时候,我们可以通过遍历数组的方式来调用它


delegate double Operations(double x);

class Program
{
static void Main()
{
Operations[] operations =
{
MathOperations.MultiplyByTwo,
MathOperations.Square
};

for (int i = 0; i < operations.Length; i++)
{
Console.WriteLine("Using operations[{0}]:", i);
DisplayNumber(operations[i], 2.0);
DisplayNumber(operations[i], 7.94);
Console.ReadLine();
}
}

static void DisplayNumber(Operations action, double value)
{
double result = action(value);
Console.WriteLine(
"Input Value is {0}, result of operation is {1}", value, result);
}
}

struct MathOperations
{
public static double MultiplyByTwo(double value)
{
return value * 2;
}

public static double Square(double value)
{
return value * value;
}
}

上面实例中

将委托定义好

之后就可以遍历它

委托的实现方式还有三种  持续更新中!

c# 委托详解,布布扣,bubuko.com

时间: 2024-12-28 21:51:31

c# 委托详解的相关文章

.Net委托详解

搬运自http://wurang.me/2014/04/22/delegate.html [什么是委托] 委托是对函数的引用,它是一个引用类型,类似c/cpp中的函数指针.但它是类型安全的. 委托是一个类,定义了方法的类型,可以将方法当做另一个方法的参数传递. 委托就是一个安全的函数指针,用来执行函数方法的东西. [如何使用委托] 在.Net框架下,委托的使用方法经历了多次改变. 最初委托的使用方法如下: public delegate string MyDelegate(string name

基础拾忆------委托详解

目录: 基础拾忆------委托详解 基础拾忆------接口详解 基础拾忆------泛型详解 前言: C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托(Delegate)特别用于实现事件和回调方法.所有的委托都派生自 System.Delegate 类.把一个方法当作参数传递,让其它方法进行调用执行. 好比:今天中午不想出去,委托小明帮我带份饭,我要买饭,但是小明帮我买的. 1.委托的声明 委托声

事件委托详解

基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click.keydown......)的函数委托到另一个元素: 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,然后在外层元素上去执行函数. 举个例子,比如一个宿舍的同学同时快递到了,一种方法就是他们都傻傻地一个个去领取,还有一种方法就是把这件事情委托给宿舍长,让一个人出去拿好所有快递,然后再根据收件人一一分发

JavaScript 事件委托详解

基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click.keydown......)的函数委托到另一个元素: 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,然后在外层元素上去执行函数. 举个例子,比如一个宿舍的同学同时快递到了,一种方法就是他们都傻傻地一个个去领取,还有一种方法就是把这件事情委托给宿舍长,让一个人出去拿好所有快递,然后再根据收件人一一分发

JS中的事件委托详解(未完)

什么是JS事件委托呢? 首先,我们要明确什么是事件:所谓的事件就是像:onclick,onmouseover,onmouseover.......这些事件,那委托呢?就是指原来发生在这些事件上的元素,加到其它的元素身上来完成. JS事件委托的原理:就是利用冒泡的原理,把事件加到父级或是父级的父级身上,来触发执行操作. 使用事件委托的优势:1)提高性能: 2)新添加的元素也会有之前加的事件: 下面我们用例子来说明一下:点击改变li的背景颜色 HTML部分: 1 <ul id="ul1&quo

C#事件与委托详解【精华 多看看】

Delegate delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用".它所实现的功能与C/C++中的函数指针十分相似.它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m.但与函数指针相比,delegate有许多函数委托和事件在 .Net Framework中的应用非常广泛指针不具备的优点.首先,函数指针只能指

[C#基础知识]委托详解

1. 委托是什么? 个人认为,可以从以下2点来理解:  (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型. (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象. 既然委托是一种类型,那么它存储的是什么数据? 我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址.调用委托的时候,委托包含的所有方法将被执行. 2. 委托类型的定义 委托是类型,就好像类是类型一样.与类一样,委托类型必须在被用来创建变量以及类型对象之前声明. delegate void

C#3.0新特性&mdash;&mdash;委托详解

前言   委托的定义 委托的本质:函数指针.让方法作为变量一样传递. 定义:委托是一种类型安全的函数回调机制, 它不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力. 也就是说,委托可以在程序运行时调用不同方法函数,只要这个方法签名和委托签名保持一致.与函数指针不同的是,委托是类型安全的.所谓类型安全,是指在编译时编译器会检测委托对象的签名是否委托声明一致. using System; using System.Collections.Generic; using Syst

委托详解

委托 为什么要使用委托: 我们习惯性的把数据当做参数传递给方法,如果给方法传递一个方法呢?但是往往有时候我们要给一个方法传递另一个方法.更麻烦的是,有时候我们并不知道程序在编译时才知道应该传递哪一个方法.但是.NET Framework语法是不允许直接调用方法的,必须把方法的细节封装在一种新类型的对象中,这个新类型就是委托.关键字是delegate.委托是一个特殊的类型对象,其特殊之处在于,我们以前定义的对象包含的是数据,但是委托保护哈韩的只是一个方法或多个方法的地址. 与委托相关的类与关键字(