如何使托管包装类使用另一个托管包装类的属性?

时间:2011-04-21 06:38:00

标签: visual-c++ c++-cli mixed-mode

我的想法是我想重用代码而不是重复代码。下面,UnManagedB派生自UnmanagedA。两个结构都有相应的托管包装器,如下所示。我想从ManagedA派生ManagedB,以便我可以重用ManagedA for 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;
};

1 个答案:

答案 0 :(得分:0)

虽然它们都有自己的指向非托管对象的指针,但大概这些指针指向完全相同的未管理对象 - 所以应该没有问题。如果您不同意描述特定的使用方案,它将无法正常工作,那么我们可以提供更好的帮助。