using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Globalization;
using NetBpm.Util.Client;
using System.Reflection;
using System.Xml;
using System.Data.OleDb;
namespace ConsoleApplication1
{
class Program
{
//代理代理,就是代表某个类上的方法,当然就要知道该方法的原型
// 就象你代理家电产品,而不是汽车。
// 如果代码中与代理的函数类型不匹配的话,会报错。
//delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。
//与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。
//它所实现的功能与C/C++中的函数指针十分相似。
//它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。
//但与函数指针相比,delegate有许多函数指针不具备的优点。
// 首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。
//在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。
// 其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。
//也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。
//// 步骤1,声明delegate对象
private delegate string MyDelegate1(string sss);
private delegate void MyDelegate(string sss);
static void Main(string[] args)
{
// 步骤2,创建delegate对象
MyDelegate md = new MyDelegate(C1.PrintString);
// 步骤3,调用delegate
md("bax");
MyDelegate1 md1 = new MyDelegate1(C1.PrintString1);
string strRet = md1("bax");
Console.WriteLine("Main:" + strRet);
}
public void Fun1(string sssss)
{
Console.WriteLine("Fun1:" + sssss);
}
}
class C1
{
//必须加static
public static void PrintString(string str1)
{
Console.WriteLine("public void PrintString:" + str1);
}
//必须加static
public static string PrintString1(string str1)
{
Console.WriteLine("public string void PrintString:" + str1);
return "public string void PrintString:" + str1;
}
}
}
public void PrintString:bax
public string void PrintString:bax
Main:public string void PrintString:bax