C# AND C++11 托管和函数指针

闲暇之余学了C#,觉得有些概念因为C#过度包装而丧失了一些灵活性,今天看到托管,觉得这个概念很神奇,就查资料

托管delegate其实就是一个能够装函数的东西,这个东西在C++里面叫做指针【PS:C++:我啥都是指针,怕不怕】

写了一个简单的对比程序,这下就应该明白了

using System;
namespace ConsoleApp1
{
    class Program
    {
        class btn_base //纯虚基类
        {
            public virtual void click() { } //这是模拟C++的格式,其实C#里面的纯虚基类要么用abstract,要么用interface
        }
        class Button : btn_base
        {
            public delegate void btn_func();  //托管类型,l类似于C++中的函数指针,他存放的是函数的地址/对象,这一行在C++里面写作  using btn_func=void(void)
            public event btn_func click_func; //使用托管类型来声明一个指针,在C++里面是  btn_func *click_func;
            public Button(btn_func action)
            {
                click_func = action;          //设置托管
            }
            public override void click()      //覆盖基类的虚函数,C++自动覆盖
            {
                click_func();
            }
        }
        static void Btn1_click()
        {
            Console.WriteLine("Btn 1 has clicked");
        }
        static void Main(string[] args)
        {
            Button btn1 = new Button(Btn1_click);
            btn1.click();
        }

    }
    
}
#include<iostream>
using namespace std;
class btn_base{
public:
    virtual void click()=0;
};
class Button : public btn_base{
public:
    using btn_func=void(void);
    btn_func *click_func;
    Button(btn_func* action){
        click_func=action;
    }
    void click(){
        click_func();
    }
};
void Btn1_click(){
    cout<<"Btn 1 has clicked"<<endl;
}
int main(){
    Button *btn_a=new Button(Btn1_click);
    btn_a->click();
}

其实一毛一样,对吧。

我个人觉得,C#有些地方设计还是比较……新手友好,C++灵活即是缺点,也是优点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值