Как заставить управляемый класс-оболочку использовать свойства другого управляемого класса-оболочки? - PullRequest
1 голос
/ 21 апреля 2011

Идея состоит в том, что я хотел бы повторно использовать код, а не дублировать его. Ниже 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;
};

1 Ответ

0 голосов
/ 21 апреля 2011

Хотя у них обоих есть свой собственный указатель на неуправляемые объекты, предположительно, эти указатели указывают на точно такой же неуправляемый объект - поэтому проблем быть не должно.Если вы не согласны, опишите конкретный сценарий использования , в котором он не будет работать правильно, и тогда мы сможем вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...