`
izuoyan
  • 浏览: 9374904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在C#中派生C++的抽象类

 
阅读更多

目前看到了几种选择:

  • SWIG
    • 这个叫做"director"的机制不是真正的派生, 只是看起来像而已
    • C#里的类只是包装了一个C++对象的指针, 所有调用都是通过P/Invoke完成的, 实际上是两个不同的对象
  • CXXI
    • 通过改变C++对象的vtable实现派生
    • 通过DLL(so)的导出方法名来取得函数指针
    • 通过解析GCCXML来生成C++类的C#声明
    • MSVC的支持还没有完成, 可以参考这个去完善:Inheriting From a Native C++ Class in C#
  • [Hack]
    • 嵌入mono后可以通过C++类里调用C#那边同名类的method来实现
    • 也是假的派生, 实际上是两个对象
    • 可以在C++这边针对C#方法的调用做异常处理, 防止崩溃

分享到:
评论

相关推荐

    C#程序设计-3期(KC008) KC008110100020-C#接口和C++抽象类一样吗?.docx

    尽管C#接口和C++抽象类在目的上都旨在实现多态性,它们在实现和应用上的差异却很大。理解这些差异对于开发者在面对不同的编程语言选择时,做出更加合理的设计决策至关重要。正确地应用接口和抽象类能够提高代码的...

    由Person类派生出学生类Student和教师类Teacher

    在派生类中,如果需要覆盖或重载基类的方法,如这里的`show`函数,可以通过在子类中定义同名但参数列表不同的函数来实现。这在`Student`和`Teacher`类中都做了,使得`show`函数可以根据传入的对象类型展示不同的信息...

    C++程序员转C#必看入门书籍

    接口是C#中定义抽象类型的另一种方式,本书介绍了如何定义接口,以及如何在类中实现接口的方法。通过实现多个接口,C#支持多重接口实现。 ### 互操作性 C#支持与其他语言(如C++和COM组件)的互操作性。本书介绍了...

    C++单项选择复习题

    4. 成员函数可以重载,即同一类中可以有多个同名但参数不同的函数。 友元函数: 1. 友元函数不是类的成员,但可以访问类的私有和保护成员,增加了代码的灵活性。 2. 友元函数破坏了封装性,因此应谨慎使用,通常...

    东北大学C#课件继续上传中,感觉课件做得还不错

    在访问继承成员时,就像这些成员直接在派生类中声明一样。继承的构造函数则有所不同,每个类都有一个构造函数,即使没有显式定义,也会有一个默认的无参构造函数。除非是特殊的`object`类,所有类都是其他类的派生类...

    软件专业C#测试题.docx

    在 C#中要在派生类中重新定义基类的虚函数必须在前面加 Override。 答案:a) 在 C++中支持抽象类而在 C#中不支持抽象类。 解释:C#中支持抽象类,抽象类是不能被实例化的类,它只能被继承。C++中也支持抽象类,...

    C++中接口的实现.pdf

    这得益于C++的动态绑定机制,即多态性,允许我们通过基类指针调用派生类中的方法,从而实现接口的灵活使用。 #### C++接口实现的示例 考虑以下C++代码示例,它展示了如何定义和实现接口: ```cpp // 定义接口 ...

    C++类之间的关系1.zip

    在C++中,抽象类通常包含纯虚函数,无法实例化,但可以被其他类继承,提供接口规范。 **7. 构造函数与析构函数** 构造函数在对象创建时自动调用,用于初始化对象成员。析构函数在对象销毁前调用,用于清理资源。在...

    C#使用中常见问题整理

    此外,`sealed`也可以用于方法和属性,表示它们不能在派生类中被覆写。 ### 7. override和overload的区别? `override`用于在派生类中覆写基类的虚方法,以提供新的实现。`overload`则是方法重载,允许在同一类中...

    c#教程(超清晰,你值得拥有)

    抽象方法是没有具体实现的方法,它必须在非抽象的派生类中实现。 密封类和密封方法: 密封类不允许其他类继承,密封方法则不能在派生类中被覆盖。 接口: 接口定义了可以由类和结构实现的一组相关功能。一个类或...

    C++程序员面试宝典,包含各大公司的面试题,C++.zip

    由于标签中提到了"c#",尽管主要焦点是C++,但我们可以预期面试题可能也会涉及一些与C#相关的概念,因为这两者在某些方面有共通之处。 1. **C++基础** - 数据类型:包括基本类型(如int、char)、指针、引用等。 ...

    c# 组件化编程技术

    在C# 中,通过定义类,我们可以创建对象的实例,这些对象具有特定的属性(数据成员)和行为(方法)。类可以通过`new`操作符实例化,创建对象。 继承是面向对象中的另一个关键特性,它允许创建新的类(派生类)基于...

    微软C#教程

    接口中的成员必须在实现该接口的类中具体化,这意味着类必须提供接口成员的实际代码。接口成员可以是方法、属性、索引器或事件。 **15.4 接口的实现** 实现接口时,类必须完全实现接口中的所有成员,否则类本身也...

    C++类之间的关系2.zip

    在C++中,含有至少一个纯虚函数的类就是抽象类,纯虚函数用`= 0`声明,如`virtual void func() = 0;`。抽象类通常用于定义基类,子类必须实现所有纯虚函数,从而确保它们具备必要的接口。 5. **模板(Template)**...

    面向对象c#试题参考

    C#要求在派生类中重写基类的虚函数时使用`override`关键字,而使用`new`修饰符可以隐藏基类成员,但这并不等同于重写。 3. ASP.NET中的代码隐藏:在ASP.NET中,Web窗体页的逻辑代码通常与用户界面分离,存储在以`....

    C#语言参考.doc

    在C#中,类可以实现继承,即一个类可以从另一个类派生,从而继承其成员和特征。 - **继承**:子类可以从基类继承字段、方法、属性等成员。 - **多态**:允许子类重写基类的方法,实现多态性。 - **抽象类与接口**:...

    c# 基础 问答形式 有详细答案

    `abstract`和`virtual`可以同时用于声明一个方法,但`abstract`方法不能与`override`一起使用,因为`abstract`方法需要在派生类中重写,而`override`用于重写基类中的虚方法。 #### 15. 接口可包含的成员类型 接口...

    C++ 类和对象.zip

    在C++编程语言中,类和对象是面向对象编程(OOP)的核心概念。类是对象的蓝图,它定义了一组特性和行为,而对象则是类的实例,具备了类所描述的属性和方法。本资料包“C++ 类和对象.zip”很可能是为了深入讲解这些...

    职大微软ATA考试C#考试真题

    - 虚函数在派生类中重新定义需使用OVERRIDE关键字。 - 抽象类可以包含抽象成员,但不是必须的,也可以包含非抽象成员。 - 声明为ABSTRACT的方法只需声明,无需实现。 4. 抽象类与抽象成员:抽象类不一定包含抽象...

    微软ATA考试题C#整理.pdf

    声明为ABSTRACT的方法在抽象类中只需声明,不需要实现。 5. 程序结构:程序通常由分支结构、循环结构和顺序结构组成,不包含跳转结构。 6. 面向对象的"类"特性:类包含属性、方法和事件,其中数据成员、函数成员等...

Global site tag (gtag.js) - Google Analytics