c#委托实例化和调用语句
Framework的CLR库不同意程序通过指针来直接操作内存中数据或方法。而是通过托管机制来訪问内存中数据或调用内存中的方法。托付就是C#提供的一种以托管机制调用方法的特殊数据类型,其作用于房屋租凭中介机构类似。
以下我们主要环绕以下三点
//1.定义托付
//2.托付的实例化
//3.托付的调用。实际上是将托付指向已经实现的某个方法
//注意:调用的方法必须返回类型和定义的托付返回类型一致
托付是一个类,它定义了方法的类型,使得能够将方法当做參数进行传递。
一:托付的定义
在C#中使用keyworddelegate声明托付。声明托付的一般形式是:
//托付的定义
// [訪问修饰符] delegate 数据类型 托付名(參数列表....)
在使用托付前是一定先要定义的
比如:Delegate void d(int x)
二:实例化( 与方法绑定)
为了与命名方法一起使用,托付必须用具有可接受签名的方法进行实例化。
实例化的方法可用下列方法各项之中的一个
- “托付创建表达式”中引用的静态方法,或者
- “托付创建表达式”中引用的目标对象(此对象不能为 null)和实例方法
- 还有一个托付
比如:
Delegate void d(int x) delegate void D(int x);
class C
{
public static void M1(int i) {...}
public void M2(int i) {...}
}
class Test
{
static void Main() {
D cd1 = new D(C.M1); // static method
Test t = new C();
D cd2 = new D(t.M2); // instance method
D cd3 = new D(cd2); // another delegate
}
}
三.托付调用
创建托付对象后,通常将托付对象传递给将调用该托付的其它代码。通过托付对象的名称(后面跟着要传递给托付的參数,括在括号内)调用托付对象。以下是托付调用的演示样例:
public delegate int MathOp(int i,int j);//定义托付
class DelegateTest
{
public static int add(int i, int j) {//方法
return i + j;
}
public static int Mutiply(int num1, int num2) {//方法 return num1 * num2; } static void Main(string[] args)
{
MathOp mo = new MathOp(add);//托付的实例化,指向add方法
MathOp maOp = new MathOp(Mutiply);//托付的实例化,指向Mutiply方法 Console.WriteLine(mo(10, 20));//托付的调用
Console.WriteLine(maOp(4, 5));//托付的调用 Console.ReadLine();
}
} }
认识:
曾经对托付的认识仅仅是知道托付是方法的调用。通过这次的项目实例了解到托付也是须要定义,实例化与调用的。
还是先前学艺不精占呀。
托付的使用通常与匿名函数或lambda表达式匹配使用,下篇介绍匿名函数。
版权声明:本文博主原创文章,博客,未经同意不得转载。
c#委托实例化和调用语句的更多相关文章
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...
- 反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)
反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性.字段),而不去使用Invoke方法) 创建Delegate (1).Delegate.CreateDelegate(Type, ...
- C#委托的异步调用1
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: /*添加的命名空间 u ...
- C#委托的异步调用
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: /*添加的命名空间 u ...
- discuz 万能SQL查询调用语句写法
首先在最底层source\class\table写入底层安全调用文件例如:table_common_friendlink.php 代码: <?php /** * [Discuz!] (C)200 ...
- java 实例化是调用了子类重写方法
java 实例化时调用了抽象方法或者class里面某个方法,如果子类有重写改方法,实际运行的是子类重写方法 package auto.test; //抽象父类 public abstract clas ...
- C#委托的异步调用【转】
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...
- C# 委托的同步调用和异步调用
委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. 同步调用的例子: using System; using System.T ...
- Oracle 存储过程调用语句
#oracle 存储过程调用语句declare v_custName varchar2(10); --客户姓名 v_num number; --订单分布天数 v_time number; --每日订单 ...
随机推荐
- 隐马尔科夫模型(HMM)及事实上现
马尔科夫模型 马尔科夫模型是单重随机过程,是一个2元组:(S,A). 当中S是状态集合,A是状态转移矩阵. 仅仅用状态转移来描写叙述随机过程. 马尔科夫模型的2个如果 有限历史性如果:t+l时刻系统状 ...
- c#为了实现自己的线程池功能(一)
线程池的技术背景 在面向对象编程中,创建和销毁对象是非常费时间的,由于创建一个对象要获取内存资源或者其他很多其他资源,所以提高服务程序效率的一个手段就是尽可能降低创建和销毁对象的次数.特别是一些非常耗 ...
- PHP_保留两位小数而且四舍五入_保留两位小数而且不四舍五入
php保留两位小数而且四舍五入 $num = 123213.666666; echo sprintf("%.2f", $num); php保留两位小数而且不四舍五入 $num = ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 递归算法的数据结构和算法 C++和PHP达到
递归算法:它是一种间接的方法调用本身,直接或. 实施过程:按功能或子程序完成.在函数编写代码或子程序直接或间接拥有被称为.你可以完成递归. (相同类型的问题,子问题到最小问题有已知条件,然后来求解,然 ...
- ubuntu系统下给你的ipad充电(适用于所有ios设备)
用ipad的都知道,当我们的ipad插上电脑的usb端口默认是不能充电的.windows和ubuntu平台解决办法分别如下. windows平台: 安装软件 ai_charger http://eve ...
- silverlight与wcf双向通讯 例子
本文将建立一个silverlight与wcf双向通讯的简单实例,以下是详细步骤: 新建Silverlight应用程序,名称WCFtest.解决方案中添加WCF服务应用程序,名称WcfServiceTe ...
- ufldl学习笔记和编程作业:Softmax Regression(softmax回报)
ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...
- POJ 1905-Expanding Rods(二分法+计算几何)
题目地址:POJ 1905 题意:一根某种材料做的直杆被夹在两面墙之间,当他受热时长度变长,就会因两面墙的挤压而向上隆起.长度变化函数为 L'=(1+n*C)*L,给定L,C,n,求向上拱起的高度H. ...
- CareerCup它1.8 串移包括问题
[称号] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another ...