class liyufeng
{
//注意,此处必须声明为静态方法。
public:
static void mySay()
{
printf("I Like You,Do you know,if you don’t know,now I must tell you ,tell you!");
}
};
class goodfriend
{
typedef void (*middleSay)();
public:
static void friendSay(middleSay say)
{
say();
}
};
class beautifulpark
{
int _tmain(int argc, _TCHAR* argv[])
{
int c;
goodfriend::friendSay(liyufeng::mySay);
scanf_s("%d",&c);
return 0;
}
}
class liyufeng
{
//注意,此处可以不声明为静态方法
public static void mySay()
{
System.Console.WriteLine("I Like You,Do you know,if you don’t know,now I must tell you ,tell you!");
}
}
这个liyufeng类和上面的C++版本的不同的只是输出到控制台用的方法不一样。
class goodfriend
{
//这里使用delegate关键字声明.NET下的委托类型,同样,我说话的那个mySay方法就由这个委托代劳.
public delegate void middleSay();
public static void friendSay(middleSay say)
{
say();
}
}
class beautifulpark
{
static void
{
goodfriend.friendSay(liyufeng.mySay);
System.Console.Read();
}
}
//注意,此处必须声明为静态方法。
public:
static void mySay()
{}
为什么必须声明为静态方法?再看一下C#的代码:
//注意,此处可以不声明为静态方法
public static void mySay(){}
为什么这里可以不声明为静态方法?这里我们可以清楚的是,C++中用函数指针来调用的函数必须是静态的(C语言里这点无关紧要),而在C#中用委托来调用的函数可以是静态的,也可以不是.还不仅仅如此,函数指针一次只能实现对一个函数的调用,而委托没有这个限制,可以实现一次调用多个函数.
