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).