1

アイデアは、コードを複製せずに再利用したいということです。以下では、UnManagedB は UnmanagedA から派生しています。以下に示すように、両方の構造体に対応するマネージド ラッパーがあります。ManagedB の ManagedA のプロパティを再利用できるように、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;
};
4

1 に答える 1

0

どちらもアンマネージドオブジェクトへの独自のポインターを持っていますが、おそらくそれらのポインターはまったく同じアンマネージドオブジェクトを指しているので問題はありません。正しく機能しない特定の使用シナリオについて説明することに同意できない場合は、より適切にサポートできます。

于 2011-04-21T12:17:33.997 に答える