1、向窗体中添加控件的最少步骤:                 窗体的句柄为this

private System.Windows.Forms.Button button1;                //声明button类变量button1

this.button1 = new System.Windows.Forms.Button();       //创建button对象,其(name属性)句柄为button1-----实例化

this.Controls.Add(this.button1);                                      //通过句柄button1,将button1控件添加到窗体中

c#委托声明实例化与调用

转载地址:http://blog.csdn.net/han_yankun2009/article/details/25919565

系统访问数据或调用方法有两种操作方式:一种是通过名称访问或调用,另一种是通过所在的内存地址来访问调用。为了系统的安全与稳定,NET Framework的CLR库不允许程序通过指针来直接操作内存中数据或方法,而是通过托管机制来访问内存中数据或调用内存中的方法。委托就是C#提供的一种以托管机制调用方法的特殊数据类型,其作用于房屋租凭中介机构类似。
 
下面我们主要围绕以下三点
 
    //1.定义委托  
    //2.委托的实例化 
    //3.委托的调用,实际上是将委托指向已经实现的某个方法 
 
    //注意:调用的方法必须返回类型和定义的委托返回类型一致 
 
 
 委托是一个类,它定义了方法的类型,使得可以将方法当做参数进行传递。
 
一:委托的定义
 
在C#中使用关键字delegate声明委托。声明委托的一般形式是:
 
//委托的定义  
    // [访问修饰符]  delegate  数据类型  委托名(参数列表....) 
 
在使用委托前是一定先要定义的
 
  1. 例如:Delegate void d(int x)

2、public delegate void dlgleixing(string str);     //声明了一个参数为string str无返回值的delegate类型
 
二:实例化( 与方法绑定) 


为了与命名方法一起使用,委托必须用具有可接受签名的方法进行实例化。
 
实例化的方法可用下列方法各项之一

  • “委托创建表达式”中引用的静态方法,或者
  • “委托创建表达式”中引用的目标对象(此对象不能为 null)和实例方法
  •  另一个委托

例如:

  1. Delegate void d(int x)
  2. delegate void D(int x);
  3. class C
  4. {
  5. public static void M1(int i) {...}
  6. public void M2(int i) {...}
  7. }
  8. class Test
  9. {
  10. static void Main() {
  11. D cd1 = new D(C.M1);      // static method
  12. Test t = new C();
  13. D cd2 = new D(t.M2);      // instance method
  14. D cd3 = new D(cd2);      // another delegate
  15. }
  16. }

三.委托调用


 
创建委托对象后,通常将委托对象传递给将调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,括在括号内)调用委托对象。下面是委托调用的示例:

  1. public delegate int MathOp(int i,int j);//定义委托
  2. class DelegateTest
  3. {
  4. public static int  add(int i, int j) {//方法
  5. return i + j;
  6. }
  7. public static int Mutiply(int num1, int num2) {//方法
  8. return num1 * num2;
  9. }
  10. static void Main(string[] args)
  11. {
  12. MathOp mo = new MathOp(add);//委托的实例化,指向add方法
  13. MathOp maOp = new MathOp(Mutiply);//委托的实例化,指向Mutiply方法
  14. Console.WriteLine(mo(10, 20));//委托的调用
  15. Console.WriteLine(maOp(4, 5));//委托的调用
  16. Console.ReadLine();
  17. }
  18. }
  19. }

认识:

以前对委托的认识只是知道委托是方法的调用。通过这次的项目实例了解到委托也是需要定义,实例化与调用的。还是先前学艺不精占呀。委托的使用通常与匿名函数或lambda表达式匹配使用,下篇介绍匿名函数

C#学习之------委托的更多相关文章

  1. C#学习之委托和事件

    C#学习中,关于委托和事件的一些见解: 一.C语言中的函数指针 想要理解什么是委托,就要先理解函数指针的概念.所谓函数指针,就是指向函数的指针(等于没说-.-).比如我定义了两个函数square和cu ...

  2. C#学习之委托与事件

    委托 语法:  public  delegate void MyDelegate(); 使用:  1.定义委托----public  delegate void MyDelegate(); 2.注册委 ...

  3. .net学习之委托和事件

    1.什么是委托通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器上传图片: 2.委托语法准备一个方法:string Hello(string userName){} string ...

  4. c#基础学习笔记-----------委托事件

    这里有一个比较简单的委托实例应用(跨窗体操作控件) http://blog.csdn.net/bdstjk/article/details/7004035 还有一个比较详细的介绍并深入理解委托事件的讲 ...

  5. 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理

    描述: 我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约10s时间,全部轮询下来需要很长时间.所以我现在要更改,头给了我两个方法,1多线程 2异步委托回调函数. 异步委托回调函 ...

  6. 从一些代码方法中,去学习C#委托

    先来看看下面一个类中的一些方法: class Bc { public double Add(double number1, double number2) { return number1 + num ...

  7. C#基础学习之委托的理解和应用

    委托的使用和语法定义 委托的使用是由四步来完成的,依次为:声明委托.创建委托对象.委托关联方法.调用 我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现. 首先我们应 ...

  8. C#图解教程学习笔记——委托

    一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...

  9. C# ~ 从 委托事件 到 观察者模式 - Observer

    委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...

随机推荐

  1. uncompyle2 windows安装和使用方法

    uncompyle2是Python 2.7的反编译工具,它可以把python生成的pyo.pyc字节码文件反编译为十分完美的源码,并可以将反编译后的源码再次生成字节码文件! ----- 本文介绍在wi ...

  2. ios 学习笔记(8) 控件 按钮(UIButton)的使用方法

    在实际开发中,对于开发者来说,更多的还是使用“自定义”按钮.将“按钮”对象的类型设置成UIButtonTypeCustom.这样一来,按钮的所有元素都将由开发者来配置和自定义. 对于一个自定义按钮来说 ...

  3. web api 开发之 filter

     1.使用filter之前应该知道的(不知道也无所谓,哈哈!) 谈到filter 不得不先了解下aop(Aspect Oriented Programming)面向切面的编程.(度娘上关于aop一大堆 ...

  4. ORA-20000:ORU-10027:buffer overflow,limit of 10000 bytes错误4

    今天再测试一个存储过程时,用DBMS_OUTPUT.PUT_LINE输出时,报 ORA-20000:ORU-10027:buffer overflow,limit of 10000 bytes SQL ...

  5. Tomcat+redis+nginx配置

    为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...

  6. HDU 1851 A Simple Game

    典型的尼姆博弈,在n对石子中,告诉你每堆的数目和每次从该堆最多可以取的数目,求最终谁将其取完. 题解:SG(i)=mi%(li+1),求异或值即可. #include <cstdio> i ...

  7. HDU 1711 Number Sequence KMP

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1711 AC代码: #include <iostream> #include <cs ...

  8. 百度复制SQL语句

    本词条从基础知识.判断对象和应用技巧等方面,介绍了SQL(Structured Query Language)结构化查询语言的应用方法. 目录 1基础 ▪ 创建数据库▪ 删除数据库▪ 备份sql se ...

  9. nodejs hello world (调用文件执行没反应)

    今天学习了node.js ,来看一下hello world 的写法. 1. 首先安装node.js的驱动文件.http://nodejs.org/ 2. a:安装好node之后,在CMD窗口输入nod ...

  10. JS 排列组合

    function $CL(arr, n, noLC, arrDan) { //从arr中取n个组合,然后 var r = [], sum = 0; n = n - arrDan.length; (fu ...