【发布时间】:2011-08-10 01:45:03
【问题描述】:
这个想法是我想重用代码而不是复制它。下面,UnManagedB 派生自 UnmanagedA。这两个结构都有其相应的托管包装器,如下所示。我想从 ManagedA 派生 ManagedB,以便我可以将 ManagedA 中的属性重用于 ManagedB。问题是两个类都有自己的指向非托管对象的指针。派生中的非托管对象就是我想要的,我希望所有属性都使用 UnManagedB 指针。有没有办法做到这一点?
struct UnManagedA {
unsigned int size;
};
struct UnManagedB:UnManagedA {
int length;
int width;
};
public ref class A : public System::IDisposable {
public:
A();
!A();
~A();
property System::UInt32 Size {
System::UInt32 get();
void set(System::UInt32 value);
}
internal:
UnmanagedA* GetUnmanaged() { return obj1; }
private:
UnmanagedA* obj1;
};
public ref class B : public System::IDisposable, public A {
public:
B();
!B();
~B();
property System::UInt32 Length {
System::UInt32 get();
void set(System::UInt32 value);
}
property System::UInt32 Width {
System::UInt32 get();
void set(System::UInt32 value);
}
internal:
UnmanagedB* GetUnmanaged() { return obj2; }
private:
UnmanagedB* obj2;
};
【问题讨论】:
-
实际问题是什么?副本在哪里?我在这里没有看到重复...
-
我所写的是我理想中想要的,但这是不可能的,因为基类和派生类都有自己的指向非托管对象的指针。
-
什么是“不可能的”。派生和基类有自己的指针有什么问题?
标签: visual-c++ c++-cli mixed-mode