在托管代码中公开非托管类型

时间:2011-09-14 03:10:45

标签: managed-c++

我在两个不同的DLL中有两个非托管类:

class A
{
public:
void doSomething();
private:
int x;
}

class B
{
public:
void doSomethingToAnA(A*);
}

我希望将它们都包装在托管C ++中,所以很自然:

ref class managedA
{
public:
void doSomething();
private:
A* unmanagedA;
}

ref class managedB
{
public:
void doSomethingToAnA(managedA*);
private:
B* unmanagedB;
}

所以doSomethingToAnA(managedA *)应该看起来像这样:

void managedB::doSomethingToAnA(managedA* a)
{
unmanagedB->doSomethingToAnA(a->unmanagedA);
}

但是,unmanagedA是私有的。我不想改变它的可见性或为它创建一个getter,因为C#用户也可以看到它(这很奇怪),而且,它在设计方面是错误的。 我也不能使用私有公共可见性,因为类位于不同的DLL中。

这个问题有一个很好的“教科书”解决方案吗?

1 个答案:

答案 0 :(得分:0)

此处Pimpl Idiom可能适用。