64,648
社区成员
发帖
与我相关
我的任务
分享
namespace StructTrans {
public ref struct info
{
double dMax;
};
public ref struct baseStruct
{
int iMax;
String ^ strMax;
};
public ref struct lev1Struct : public baseStruct
{
public:
info infoMax;
};
public ref class Class1
{
// TODO: 在此处添加此类的方法。
public:
baseStruct m_data;
public:
Class1(){}
~Class1(){}
virtual void set() { m_data.iMax = 0; m_data.strMax = "aaa";}
};
public ref class Class2 : public Class1
{
public:
lev1Struct m_data;
public:
Class2(){}
~Class2(){}
virtual void set() override {m_data.iMax = 1; m_data.strMax = "bbb"; m_data.infoMax.dMax = 1.0;}
};
}
public class Class3 : Class1
{
public override void set() { m_data.iMax = 2; m_data.strMax = "ccc"; }
}
public class Class4 : Class2
{
public override void set() { m_data.iMax = 3; m_data.strMax = "ddd"; m_data.infoMax.dMax = 4.0; }
}
{
Class1 c1 = new Class1();
c1.set();
string str = string.Format("base class Class1 : iMax = {0}, strMax = {1}\n", c1.m_data!.iMax, c1.m_data!.strMax);
Class2 c2 = new Class2();
c2.set();
str += string.Format("base class Class2 : iMax = {0}, strMax = {1}, info.dMax = {2}\n", c2.m_data.iMax, c2.m_data.strMax, c2.m_data.infoMax.dMax);
Class1 c3 = new Class3();
c3.set();
str += string.Format("base class Class3 : iMax = {0}, strMax = {1}\n", c3.m_data.iMax, c3.m_data.strMax);
Class2 c4 = new Class4();
c4.set();
str += string.Format("base class Class4 : iMax = {0}, strMax = {1}, info.dMax = {2}\n", c4.m_data.iMax, c4.m_data.strMax, c4.m_data.infoMax.dMax);
MessageBox.Show(str);
}
public ref struct lev1Struct : public baseStruct
{
info ^infoMax;
lev1Struct() { infoMax = gcnew info();}
};
Class2和Class4均能正确使用。 public:
baseStruct ^m_data;
public:
Class1(){m_data = gcnew baseStruct();}
......
virtual void set() { m_data->iMax = 0; m_data->strMax = "aaa";}
则,在C#中调用c1和c3的m_data属性,均可正确获取数据。
但对于派生类Class2中由baseStruct派生的lev1Struct类型数据m_data,如果也采用上述方法,如下:
public:
lev1Struct ^m_data;
public:
Class2(){m_data = gcnew lev1Struct();}
~Class2(){}
virtual void set() override {m_data->iMax = 1; m_data->strMax = "bbb"; m_data->infoMax.dMax = 1.0;}
则会提示infoMax无法访问。
需要怎么才能如m_data中的其他元素一样访问m_data.infoMax下的dMax?