如何在 C++/CLI 管理中访问私有变量 class
How to access private variable in C++/CLI managed class
//MyWrapper.h
#include "arithmetic.h"
#include "mathematics.h"
namespace MyWrapper {
public ref class ClassA
{
public:
ClassA();
~ClassA();
int add(int, int);
private:
MyEngine::Arithmetic *nativeClassA;
}
public ref class ClassB
{
public:
ClassB(ClassA^ arith);
~ClassB();
int pow(int, int);
private:
MyEngine::Mathematics *nativeClassB;
}
}
//MyWrapper.cpp
#include "MyWrapper.h"
My::ClassA::ClassA()
{
nativeClassA = new MyEngine::Arithmetic();
}
My::ClassA::~ClassA()
{
delete nativeClassA;
}
int My::ClassA::add(int a, int b)
{
return nativeClassA->add(a, b);
}
My::ClassB::ClassB(ClassA^ classA)
{
nativeClassB = new MyEngine::Mathematics(classA->nativeClassA); //***Error***
}
My::ClassB::~ClassB()
{
delete nativeClassB;
}
int My::ClassB::pow(int a, int b)
{
int result = nativeClassB->pow(a, b);
return result;
}
这里,数学class需要用算术class初始化。
但是 nativeClassA 是 ClassA 中的私有变量。
所以 nativeClassB = new MyEngine::Mathematics(classA->nativeClassA);
,会出现编译错误。
所以我将 nativeClassA 更改为 public。
但是到时候nativeClassA会导出到c#。
我不想将 nativeClassA 变量导出到 c#。
我该如何解决?
谢谢指教。
由于您正在编写托管 class,因此您可以使用 C# 具有的所有访问修饰符。这似乎是 internal
的完美场景。 (链接的文档是针对 C# 的,但在 C++/CLI 中是相同的关键字。)
//MyWrapper.h
#include "arithmetic.h"
#include "mathematics.h"
namespace MyWrapper {
public ref class ClassA
{
public:
ClassA();
~ClassA();
int add(int, int);
private:
MyEngine::Arithmetic *nativeClassA;
}
public ref class ClassB
{
public:
ClassB(ClassA^ arith);
~ClassB();
int pow(int, int);
private:
MyEngine::Mathematics *nativeClassB;
}
}
//MyWrapper.cpp
#include "MyWrapper.h"
My::ClassA::ClassA()
{
nativeClassA = new MyEngine::Arithmetic();
}
My::ClassA::~ClassA()
{
delete nativeClassA;
}
int My::ClassA::add(int a, int b)
{
return nativeClassA->add(a, b);
}
My::ClassB::ClassB(ClassA^ classA)
{
nativeClassB = new MyEngine::Mathematics(classA->nativeClassA); //***Error***
}
My::ClassB::~ClassB()
{
delete nativeClassB;
}
int My::ClassB::pow(int a, int b)
{
int result = nativeClassB->pow(a, b);
return result;
}
这里,数学class需要用算术class初始化。
但是 nativeClassA 是 ClassA 中的私有变量。
所以 nativeClassB = new MyEngine::Mathematics(classA->nativeClassA);
,会出现编译错误。
所以我将 nativeClassA 更改为 public。
但是到时候nativeClassA会导出到c#。 我不想将 nativeClassA 变量导出到 c#。
我该如何解决? 谢谢指教。
由于您正在编写托管 class,因此您可以使用 C# 具有的所有访问修饰符。这似乎是 internal
的完美场景。 (链接的文档是针对 C# 的,但在 C++/CLI 中是相同的关键字。)