有没有办法在值类型类中使用ref类?

时间:2014-03-11 14:36:41

标签: windows c++-cli

我刚刚进入托管c ++。我创建了一个名为Player的类,其类型是值。现在在这个类中我需要使用某种动态数组。我尝试过使用系统列表但视觉工作室给了我一个错误,我不能在值类中使用ref类。这个错误是什么?我可以使用什么?

using namespace System;
using namespace Collections;
using namespace Generic;

public value class Player
{
     // other codes

     List<int> MyItems  // Gives error : Can not use ref class

     // other codes
};

2 个答案:

答案 0 :(得分:3)

这不是问题,值类可以包含任何引用类型引用。你不能做的是随意省略^ hat,成员必须是.NET要求的引用,因为对象总是在堆上分配。你得到的编译错误可能有点笨拙。编译好了:

public value class Player {
    List<int>^ list;             // Note: ^ required.
};

答案 1 :(得分:1)

在这种情况下,我认为你不需要在这里使用value课程。如果您愿意,可以阅读它们(Value Class in C++/CLIC++/CLI: Value Class Types

相反,只需将Player设为引用类型即可。这是大多数用户类应该是的。主要区别在于您使用gcnew进行分配,垃圾收集器将进行清理。您还需要使用^来表示参考。在您的代码中,List成员缺少此内容。

public ref class Player
{
    // other codes

    List<int>^ MyItems;

    // other codes
};

void use()
{
    Player^ p = gcnew Player();
    //use p, but make sure MyItems gets allocated with `gcnew`
    //somewhere as well!
}