2016-07-02 38 views
0

的屬性我有2 REF類在C++/CLI:C++/CLI:如何寫入屬性

>第一類:

public ref class wBlobFilter 
    { 
     int mMin; 
     int mMax; 
     bool mIsActive; 

    public: 

     // min value 
     property int Min 
     { 
      int get() {return mMin;} 
      void set(int value) {mMin = value;} 
     } 

     // max value 
     property int Max 
     { 
      int get(){return mMax;} 
      void set(int value){mMax = value;} 
     } 

     // set to true to active 
     property bool IsActive 
     { 
      bool get() {return mIsActive;} 
      void set(bool value){mIsActive = value;} 
     } 
    }; 

>第二類:

public ref class wBlobParams 
    { 
     wBlobFilter mFilter; 

    public: 

     property wBlobFilter Filter 
     { 
      wBlobFilter get() {return mFilter;} 
      void set(wBlobFilter value) { mFilter = value; } 
     } 
    }; 

當我把它在C#我得到一個錯誤信息:

 Params.Filter.Min = 0; 

所以,我怎樣才能設置類wBlobFilter的成員變量的值「因爲它不是一個變量不能修改返回值」 class wBlobParams的屬性?對不起,我的英語不好。謝謝!!!

+2

您不應該在cli代碼中使用'wBlobFilter ^'而不是'wBlobFilter'嗎? – stijn

+0

如果繼承,那麼過濾器的屬性將可用。 public ref class wBlobParams:public wBlobFilter {...};我無法分辨這是你以後的樣子。 – tukra

+0

我試過了,但它不是我的問題。 \t 我不想從wBlobFilter繼承wBlobParams,wBlobFilter只是wBlobParams的成員,但我想通過wBlobParams的屬性爲它設置值。像這樣: 'Params.Filter.Min = 0' – DungTv

回答

0

很難知道你到底想要發生什麼。如果它繼承,則過濾器的屬性將可用。

public ref class wBlobParams : public wBlobFilter 
{}; 

void f(wBlobParams^ params) { 
    auto max = params->Max; 
} 

或複製在wBlobParams屬性訪問:

public ref class wBlobParams { 
public: 
    wBlobFilter^ mFilter; 

    property int Max { 
     int get() { return mFilter->Max; } 
    } 
}; 

void f(wBlobParams^ params) { 
    auto max = params->Max; 
} 

編輯1:
看這個。你在做什麼都很好。只是你使用gc句柄的語法是錯誤的。

public ref class cA { 
    int x; 

public: 
    cA() : x(0) {} 

    property int X { 
     int get() { return x; } 
     void set(int _x) { x = _x; } 
    } 
}; 

public ref class cB { 
    cA^ a; 
public: 
    cB() : a(gcnew cA()) {} 

    property cA^ A { 
     cA^ get() { return a; } 
     void set(cA^ _a) { a = _a; } 
    } 
}; 

void main() { 
    cB^ b = gcnew cB(); 
    b->A->X = 5; 
    Console::WriteLine(b->A->X); 
} 
+0

我不想從wBlobFilter繼承wBlobParams,wBlobFilter只是wBlobParams的成員,但我想通過wBlobParams的屬性爲它設置值。像這樣: 'Params.Filter.Min = 0;' – DungTv

+0

查看我的編輯 – tukra

+0

@tuka:非常感謝。我明白了。 它是錯誤的如果我改變類cA從ref到值? – DungTv