加入收藏 - 网站地图 - 网站搜索 -
阅读新闻

委托学习(1)-------函数指针的改头换面

[日期:12-30] [字体: ]

class liyufeng

{

       //注意,此处必须声明为静态方法。

public:

        static void mySay()

        {

                              printf("I Like You,Do you knowif you dont 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 Main(string[] args)

        {

            goodfriend.friendSay(liyufeng.mySay);

            System.Console.Read();

        }

    }

 

//注意,此处必须声明为静态方法。

public:

        static void mySay()

        {}

为什么必须声明为静态方法?再看一下C#的代码:

//注意,此处可以不声明为静态方法

        public static void mySay(){}

为什么这里可以不声明为静态方法?这里我们可以清楚的是,C++中用函数指针来调用的函数必须是静态的(C语言里这点无关紧要),而在C#中用委托来调用的函数可以是静态的,也可以不是.还不仅仅如此,函数指针一次只能实现对一个函数的调用,而委托没有这个限制,可以实现一次调用多个函数.



 
评论 】 【 推荐 】 【 打印
上一篇:理解ASP.NET与客户端缓存之HTTP协议
下一篇:学习委托(2)-------解析委托的实现机制
相关新闻