none
schreibgeschütztes Empty-Feld RRS feed

  • Frage

  • Hallo

    .NET-Structs und Klassen haben ja oft ein Empty-Feld, dass einen
    leeren Typ zurückgibt, z.b. String::Empty o. Guid::Empty.

    Ich möchte meiner Klasse auch so ein Empty-Field spendieren,
    mit folgendem Code:

    ref class KeyConfig
    {
    public:
    //...
      const static initonly KeyConfig^ Empty;
    
    private:
      static KeyConfig()
      {
        Empty = gcnew KeyConfig(true);
      }
    
    }
    
    Wie kann ich es erreichen, dass das Empty-Field tatsächlich unveränderbar ist,d.h.
    dass öffentliche Membervariablen von KeyConfig nicht veränderbar sind bzw Methodenaufrufe,
    wie z.B: SetKey, s.u., auf keinen Effekt haben.
    initonly und const bewirken das offensichtlich nicht,
    KeyConfig::Empty::SetKey (42)
    
    ändert jedenfalls 'm_nKey', solls aber nicht.
    Muss man das ausprogrammieren?

    Gruß,
    Christoph

    ref class KeyConfig
    {
    public:
    //...
      SetKey(int nKey) {m_nKey = nKey};
    
    private:
    //...
      int m_nKey;
    }
    
    
    

     

    Samstag, 28. August 2010 13:46

Antworten


  • Hallo

    .NET-Structs und Klassen haben ja oft ein Empty-Feld, dass einen
    leeren Typ zurückgibt, z.b. String::Empty o. Guid::Empty.

    Wie kann ich es erreichen, dass das Empty-Field tatsächlich unveränderbar ist, d.h.
    dass öffentliche Membervariablen von KeyConfig nicht veränderbar sind bzw Methodenaufrufe,
    wie z.B: SetKey, s.u., auf keinen Effekt haben.
    initonly und const bewirken das offensichtlich nicht,
    KeyConfig::Empty::SetKey (42)
    
    
    ändert jedenfalls 'm_nKey', solls aber nicht.
    Muss man das ausprogrammieren?

     

    Hallo
    also bei den Empty- Field und -Properties der .NET-FCL zeigt sich, dass die entweder zu value classes gehören,
    z.B. Rect::Empty, Color::Empty, Size::Empty, d.h. wenn ich deren Empty verwende, arbeite ich auf einer Kopie.
    Wenn sie  zu ref classes gehören, wie z.B. RegularExpressions::Match::Empty, oder auch String::Empty, dann weisen
    diese Klassen kein einziges Member auf, das eine Veränderung des inneren States erlauben würde
    - Nur Getter, Member im Ctor befüllt.
    Insofern scheint klar, dass eine ref class nur dann ein geeigneter Kandidat für ein Empty-Member sein kann,
    wenn sie von aussen nicht veränderbar ist.

    Gruß,
    Christoph

    Samstag, 28. August 2010 14:43