上一篇:用C#创建可拖动窗体 >>
C#中的委托
引言:C#中的委托着实让我迷惑(我是位初学者),在不同的C#书籍中,还译为代理、委派等,经反复查阅资料和自己动手编写代码,才稍稍理出点头绪。
C#中的委托类似于C或C++中的函数指针,但两者有本质区别:C或C++不是类型安全的,但C#中的委托是面向对象的,而且是类型安全的。
从技术角度来讲,委托是一个引用类型,用来封装带有特定签名和返回类型的方法。
1、声明委托
C#使用关键字delegate来声明委托类型:
[访问修饰符] delegate 结果类型 委托标识符([形参列表]);
委托类型可以在声明类的任何地方声明。
2、实例化委托
委托使用new运算符来实例化。
新创建的委托实例所引用的对象为以下之一:
⑴委托创建表达式中引用的静态方法
⑵委托创建表达式中引用的目标对象(此对象不能为null)和实例方法
⑶另一个委托
例如:
delegate void MyDelegate(int x);
class MyClass
{
public static void Method1(int i)
{
}
public void Method2(int i)
{
}
}
class TestClass
{
static void Main()
{
//静态方法
MyDelegate delegate1=new MyDelegate(MyClass.Method1);
//实例方法
TestClass class1=new MyClass();
MyDelegate delegate2=new MyDelegate(MyClass.Method2);
//另一个委托
MyDelegate delegate3=new MyDelegate(delegate2);
}
}
3、使用委托
通过委托对象的名称及放入括号的要传递给委托的参数来调用委托对象。调用委托时,调用表达式的主表达式必须是委托类型的值
以下是我写的一个例子:
namespace delegateTest
{
public delegate int mydelegateTest(int i,int j);
class calculate
{
public static int add(int i,int j)
{
return i+j;
}
public static int minus(int i,int j)
{
return i-j;
}
}
class delegateapp
{
static void Main(string[] args)
{
mydelegateTest d0=new mydelegateTest(calculate.add);//声明一个mydelegateTest的实例d0,并用calculate.add对其进行初始化,实际上就是将委托与方法链接起来。
int i=d0(99,1);//开始调用委托,就像是使用静态成员方法calculate.add(int i,int j)一样。
System.Console.WriteLine("这是运行add的结果:{0}",i);
mydelegateTest d1=new mydelegateTest(calculate.minus);
int j=d1(100,99);
System.Console.WriteLine("这是运行minus的结果:{0}",j);
System.Console.ReadLine();
}
}
}
下一篇:C# variable criterion >>
相关文章:
- · 教你在C#中如何读写INI文件
- · C#数组篇讲解
- · C#如何取硬件标志
- · C#语法入门1
- · 如何使用.NET生成C#源代码
- · C#中控制流程
- · C#中数组,类型转换
- · C#语言中变量的使用和注意事项
- · C#独立域名查询
- · 在C#里面调用带有回调函数和自定义结构体的DLL的例程
- · SQL SERVER与C#中数据类型的对应关系
- · C#可定制的数据库备份和恢复程序
- · C#获取硬盘序列号
- · C#公共类收集
- · .NET下的POP3编程
- · 如何用c#来制作一个activeX控件或类似的东西
- · C#中的cookie编程
- · 用C#建立自己的Web服务器
- · C#域名查询
- · 走进C#(我的C#学习之旅) 之四(3)
- · Anders Hejlsberg 谈C#设计过程
- · c#与oracle的连接!
- · 用C#快速往Excel写数据
- · 走进C#(我的C#学习之旅) 之四(2)
- · C#里的委托和事件实现Observer
- · C#如何取硬件标志
- · 用C#通过Nokia手机发送短信(使用Nokia SDK3.0)
- · C#实现的列出目录下所有子目录和文件的程序(附思路)
- · 走进C#(我的C#学习之旅) 之四(1)
- · C#学习之旅
- · c#如何发邮件?
- · C#学习之旅
- · C#与Excel的交互示例
- · 走进C# (我的C#学习之旅)之三
- · C#编写最小花时隐藏为任务栏图标的Window appllication.
- · C#中使用Excel
- · 一个通用数据库访问类(C#,SqlClient)
- · 如何在C#里面象js一样可以直接计算字符串的值
