【问题标题】:Difference between a C++/CLI ref class and a C# classC++/CLI ref 类和 C# 类之间的区别
【发布时间】:2011-07-19 06:24:20
【问题描述】:

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

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

C# 类:

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 = System::Object^不是我所期望或想要的!!)


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

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

a) 为什么这些类的行为与 this 不同?

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

提前感谢您的宝贵时间!

【问题讨论】:

  • 如何查看this 是什么类型?
  • 您没有提供任何相关代码向我们展示您如何使用this
  • @svick:来自 Visual Studio 2010 的本地人
  • @Yochai Timmer:我更新了我的问题以反映我通过查看 VS 中的本地人获得了this
  • 为此添加实际代码怎么样?例如,您可以打印到控制台。调试器有时会表现得很奇怪。

标签: c# c++-cli


【解决方案1】:

您在调试器中看到的是基类的名称 - 在本例中为 Object^。把MyClass的基类改成别的,你就会明白我的意思了。

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

【讨论】:

  • 我的看起来略有不同(只有两个级别.. thisSystem::Object^ 但你是对的,类型不同。它读取MyNamespace::MyClass^。但不幸的是我仍然得到尝试投射时类型不正确.. 但我想这不是 this 的问题。
猜你喜欢
  • 2016-01-19
  • 2019-07-26
  • 2015-11-26
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多