Geeks With Blogs

News
Step-by-Step into the cloud a blog of Dirk Eisenberg (>)

Da es heute regnet und auch der SixFlag-Park hier in Chicago geschlossen hat, habe ich mich für meinen Laptop entschieden um weiter an meinem .Net-Binding einer unter meinen Kollegen nicht ganz unbekannten Library zu basteln. Dabei habe ich für C++ Entwickler eine weitere, gewinnbringende Verbesserung durch die neue C++/CLI angetroffen.

Folgendes C#-Pattern ist wohl jedem bekannt:

public string Name
{
    get
    {
        return m_name;
    }
    set
    {
        m_name = value;
    }
}

Genau es ist die Implementierung einer Eigenschaft die über die Methode set geschrieben und mit get gelesen werden kann. Dabei braucht der Benutzer dieser Klasse nicht set und get selbst aufrufen, nein das Framework steuert den Aufruf über die Zugriffsrichtung. Das finde ich ist schonmal eine nützliche Sache nur wie hat das managed C++ gelöst ?

__property String* get_Name()
{
    return m_value;
}
__property String* set_Name(String* value)
{
    m_value = value;
}

Es gab nur das keyword __property, welches eine Methode als setter bzw. getter einer Property markiert, wodurch so mancher während der Maintenance verwirrt werden konnte. Das wurde mit der neuen C++/CLI geändert. Jetzt sind folgende Konstrukte möglich.

property String^ Name
{
    public:
     String^ get()
     {
        return m_value;
     }

    private:
     void set(String^ value)
     {
        m_value = value;
     }
}

Das Beste aus meiner Sicht ist die unterschiedliche Markierung des Codes als public oder private. So kann gesteuert werde ob der zugriff auf das Klassen-Member nur lesend, nur schreibend oder unbeschränkt erlaubt ist.

Weiterhin kann man natürlich Threading-Issues in diesen Methoden elegant implementieren und der Nutzer kommt nicht herum durch diesen Code zu laufen, weil ja der Compiler für den Sprung in diese Methoden sorgt.

CFoo^ foo = gcnew CFoo();
foo->Name = "Hello World";

 Das war bei unmanaged C++ anders. Ich hoffe es kommt beim Thema Multi-Threading keiner auf die platte Idee zu meinen, wenn die Variable static ist, wird der Zugriff darauf durch das Framework sowieso serialisiert. Wer dieser Meinung ist, sollte nochmals die Definition von static nachlesen (und zwar in alle Variation, managed und unmanged).

Posted on Sunday, September 25, 2005 3:51 PM .NET Coding | Back to top


Comments on this post: Property Handling leicht gemacht

# re: Property Handling leicht gemacht
Requesting Gravatar...
Hi Dirk,
das ist wirklich eine tolle Sache. Hab ich heute auch gerade entdeckt, nachdem ich mal die Zeit gefunden habe über den Tellerrand meines unmanaged vc6 zu schauen und mir die Vorzüge der clr anzuschauen. Mir gefällt c# sehr gut und was sie da mit managed C++ gemacht haben kommt dem schon sehr nahe. Nur Suche ich noch immer nach der Möglichkeit die Windows Control Library erfolgreich in mein Projekt einzubinden und die Properties in dem PropertyGrid zu ändern. Das geht wunderbar mit C# aber bei managed C++ hab ich das noch nicht geblickt.
Left by Ken.Guru on Jan 27, 2006 12:14 PM

Your comment:
 (will show your gravatar)


Copyright © Dirk Eisenberg | Powered by: GeeksWithBlogs.net