2017-02-24 79 views
0
//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; 
} 

這裏,Mathematics類需要使用Arithmetic類初始化。 但nativeClassA是ClassA中的私有變量。 所以nativeClassB = new MyEngine::Mathematics(classA->nativeClassA);,它會發生編譯錯誤。如何訪問C++/CLI管理類中的私有變量

所以我將nativeClassA更改爲public。

但是在那個時候,nativeClassA會導出到c#。 我不想將nativeClassA變量導出到c#。

我該如何解決? 謝謝你的建議。

回答

1

既然你寫一個託管類,你可以使用所有的C#有訪問修飾符。這似乎是爲internal一個完美的方案。 (鏈接的文檔是C#,但它是同一個關鍵字在C++/CLI)

+1

內部:MyEngine ::算術* nativeClassA;這樣? – KDEV

+0

謝謝,它工作正常。 – KDEV

+0

的C++/CLI文檔是在這裏:https://msdn.microsoft.com/en-us/library/ke3a209d.aspx#BKMK_Member_visibility –