C#委托(http://blog.csdn.net/xjj51296646/article/details/4231025)
来源:互联网 发布:浙江大学网络 编辑:程序博客网 时间:2024/06/05 14:38
一、委托
委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。
委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。
二、例子:
delegate int NumOpe(int a,int b); //第一步,声明委托
class Class1
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
NumOpe d1 = new NumOpe(c1.Add);//委托实例化,注意参数是要使用的方法名,且不带括号
Console.WriteLine(d1(1, 2));//委托调用
Console.Read();
}
private int Add(int num1, int num2)
{
return (num1 + num2);
}
} */
/*例中,委托NumOpe引用了方法Add
委托声明了以后,就可以像类一样进行实例化,委托本身就是处在类级别上的 。实例化时把要引用的方法作为参数,这样
委托和方法就关联了起来,就可以用委托来引用方法了。
委托和所引用的方法必须保持一致。
1、参数个数、类型、顺序必须完全一致。
2、返回值必须一致。
**/
/*
下面再看一个委托的示例。
* */
public delegate void PrintHandler(string str);//声明委托类型
public class PrintStr
{
public void CallPrint(string input)
{
Console.WriteLine(input);
}
public void CallPrint1(string input)
{
Console.WriteLine(input);
}
}
class Program
{
static void Main1(string[] args)
{
PrintStr myPrinter = new PrintStr();
PrintHandler myHandler = null;
//将委托链接到方法,来实例化委托
myHandler += new PrintHandler(myPrinter.CallPrint);
myHandler += new PrintHandler(myPrinter.CallPrint1);
//不使用“=”是因为这样会覆盖掉以前注册的方法
if (myHandler != null)
{
myHandler("Hello World!"); //调用委托,相当于匿名调用委托所链接的方法
}
myHandler -= new PrintHandler(myPrinter.CallPrint);
if (myHandler == null)
{
Console.WriteLine("myHandler==null");
}
else
{
myHandler("最后的一个方法");
myHandler -= new PrintHandler(myPrinter.CallPrint1);
Console.WriteLine("把最后的一个也去掉");
if (myHandler == null)
{
Console.WriteLine("myHandler==null");
}
else Console.WriteLine("还有一个");
}
Console.Read();
}
}//那什么时候该使用委托呢?一个经典回答:若A变动,一系列的B,C,D,E,F将变动,可使用委托。
}
委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。
委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。
二、例子:
delegate int NumOpe(int a,int b); //第一步,声明委托
class Class1
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
NumOpe d1 = new NumOpe(c1.Add);//委托实例化,注意参数是要使用的方法名,且不带括号
Console.WriteLine(d1(1, 2));//委托调用
Console.Read();
}
private int Add(int num1, int num2)
{
return (num1 + num2);
}
} */
/*例中,委托NumOpe引用了方法Add
委托声明了以后,就可以像类一样进行实例化,委托本身就是处在类级别上的 。实例化时把要引用的方法作为参数,这样
委托和方法就关联了起来,就可以用委托来引用方法了。
委托和所引用的方法必须保持一致。
1、参数个数、类型、顺序必须完全一致。
2、返回值必须一致。
**/
/*
下面再看一个委托的示例。
* */
public delegate void PrintHandler(string str);//声明委托类型
public class PrintStr
{
public void CallPrint(string input)
{
Console.WriteLine(input);
}
public void CallPrint1(string input)
{
Console.WriteLine(input);
}
}
class Program
{
static void Main1(string[] args)
{
PrintStr myPrinter = new PrintStr();
PrintHandler myHandler = null;
//将委托链接到方法,来实例化委托
myHandler += new PrintHandler(myPrinter.CallPrint);
myHandler += new PrintHandler(myPrinter.CallPrint1);
//不使用“=”是因为这样会覆盖掉以前注册的方法
if (myHandler != null)
{
myHandler("Hello World!"); //调用委托,相当于匿名调用委托所链接的方法
}
myHandler -= new PrintHandler(myPrinter.CallPrint);
if (myHandler == null)
{
Console.WriteLine("myHandler==null");
}
else
{
myHandler("最后的一个方法");
myHandler -= new PrintHandler(myPrinter.CallPrint1);
Console.WriteLine("把最后的一个也去掉");
if (myHandler == null)
{
Console.WriteLine("myHandler==null");
}
else Console.WriteLine("还有一个");
}
Console.Read();
}
}//那什么时候该使用委托呢?一个经典回答:若A变动,一系列的B,C,D,E,F将变动,可使用委托。
}
- C#委托(http://blog.csdn.net/xjj51296646/article/details/4231025)
- C#操作XML小结 (转:http://blog.csdn.net/xjj51296646/article/details/4241548)
- 如何用c#读写配置文件(转自:http://blog.csdn.net/lanman/article/details/5287717)
- C# 选择文件对话框(转自:http://blog.csdn.net/longest9/article/details/1567929)
- http://blog.csdn.net/IBM_hoojo/article/details/5688947
- http://blog.csdn.net/chenlaic/article/details/6143235
- http://blog.csdn.net/eaglewood2005/article/details/4335052
- http://blog.csdn.net/mchp/article/details/3995970
- http://blog.csdn.net/v_july_v/article/details/6015165
- http://blog.csdn.net/masterz/article/details/6232585
- http://blog.csdn.net/perfectpdl/article/details/6442847
- http://blog.csdn.net/eroswang/article/details/1967243
- http://blog.csdn.net/zhvsby/article/details/5986645
- http://blog.csdn.net/dz45693/article/details/6183645
- http://blog.csdn.net/david_lv/article/details/5798003
- http://blog.csdn.net/zxingchao2009/article/details/6299313
- http://blog.csdn.net/zhanxinhang/article/details/6783766
- http://blog.csdn.net/ruanruoshi/article/details/935510
- android Theme level 11 使用总结
- Golden Gate 与 Oracle DataGuard的区别
- C#操作XML小结 (转:http://blog.csdn.net/xjj51296646/article/details/4241548)
- gridview之设置单元格颜色
- HDU 威威猫系列故事——篮球梦
- C#委托(http://blog.csdn.net/xjj51296646/article/details/4231025)
- Linux基本功七:Linux对文本的操作命令及正则表达式
- Rubygem 安装错误:ERROR: While executing gem ... (Gem::RemoteSourceException)
- hdu 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
- HackingSolr -- Info for people interested in hacking and customizing the Solr application(
- Linux图像化历程
- linux下/dev/tty, /dev/tty0, /dev/console区别
- android 内存使用
- 常用人脸库