C ++ / CLI ref类和C#类之间的区别

时间:2011-07-18 21:45:40

标签: c# c++-cli

我读过C ++ / CLI ref class等同于C#类。但是,我发现每个班级this之间存在差异。

编辑:我从Visual Studio 2010的本地人那里获得了this。 (另外,我注意到在编译时执行完全相同的转换时的差异 - C ++ / CLI类给出了一个错误,指出它无法将Object ^转换为MyClass ^,而使用C#类进行转换在编译时不会产生错误)。 / p>

C#class:

namespace MyNamespace
{

   public class MyClass
   {    
       public MyClass()
           {
               //Do something
           }
   }
}

this = MyNamespace.MyClass (我期望和想要的!)


C ++ / CLI ref class

namespace MyNamespace
{

   public ref class MyClass
   {    
       public:
           MyClass::MyClass()
           {
               //Do something
           }
   }
}

this = 系统::对象^ 我所期望或想要的!)


我希望this与C#示例类似,它表明this的类型为MyClass。但是,C ++ / CLI ref类声明它的类型为Object ..这绝对不是我想要的。 (这使得在各种情况下都很困难,例如在C ++函数中进行转换)。

所以我的问题是(两部分):

a)为什么这些类与this表现不同?

b)如何让我的C ++ / CLI ref类在this中具有正确的类型?

感谢您提前的时间!

1 个答案:

答案 0 :(得分:2)

您在调试器中看到的是基类的名称 - 在本例中为Object^。将MyClass的基类更改为其他内容,您将看到我的意思。

Locals window

请注意,最右侧的列显示类型。