Auf „protected“ und „private“ Eigenschaften unter C# zugreifen

Im Normalfall hat es gute Gründe das man auf bestimmte Eigenschaften einer Klasse nicht zugreifen kann. Manchmal ist es aber dennoch nützlich genau dies zu tun. So zum Beispiel bei der „NetworkStream“ Klasse welche im .NET/Mono Framework zu finden ist. Diese hat dabei die Eigenschaft „Socket“ welche „protected“ ist. Möchte man nun doch auf diese Eigenschaft zugreifen, so muss man zu etwas Magie in Form von Reflection greifen:

NetworkStream stream;
...
PropertyInfo pi=stream.GetType().GetProperty("Socket", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);
Socket socket=(Socket)pi.GetValue(stream, null);

Hier holt man sich mittels Reflection die Eigenschaft und castet sie. Anschließend hat man dann in der Variable „socket“ die entsprechende Eigenschaft und kann mit dieser dann machen was man möchte.

JavaScript Integer in Enum umwandeln

In JavaScript ist es durchaus möglich Enums anzulegen:

var Protocol =
{ 
  PAMSG_REGISTER:0x0000, // D version, S username, S password, S email, S captcha response
  APMSG_REGISTER_RESPONSE:0x0002, // B error, S updatehost, S Client data URL, B Character slots
  PAMSG_UNREGISTER:0x0003, // S username, S password
}

Interessant wird es nun, wenn man versucht aus einer Zahl in diesem Beispiel der „2“ wieder einen Enum („APMSG_REGISTER_RESPONSE“) zu erzeugen. Hierbei hilft die Funktion „getEnumFromInteger“ welche wie folgt aussieht:

function getEnumFromInteger(enumWithValues, integer)
{
  var keys = Object.keys(enumWithValues);
    
  for (var i=0; i<keys.length; i++)
  {
    if(enumWithValues[keys[i]]==integer) return keys[i];
  }
    
  return null;
}

Damit wird der Enum durchiteriert und der entsprechende Schlüssel, welcher dem Integer entspricht, zurückgegeben.

Hack & Slash RPG Tutorial für Unity

Für Unity (die Spielengine, nicht die Ubuntuoberfläche) gibt es eine Menge Dokumentation angefangen bei Tutorien bis zu Büchern (wobei deutsche Bücher an dieser Stelle Mangelware sind). Eines der ausführlicheren Tutorien ist „Hack & Slash RPG Tutorial“ welches mittlerweile aus 285 Teilen besteht. Zu finden ist dieses unter http://www.burgzergarcade.com/hack-slash-rpg-unity3d-game-engine-tutorial. In dem Tutorial wird dabei Stück für Stück ein Rollenspiel in Unity aufgebaut und stetig verbessert. Das ganze wird dabei in Form von Videos präsentiert, was bestimmte Erklärungen wesentlich vereinfacht.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Unity_3D

MonoDevelop unter Mac OS X mehrfach starten

Manchmal kommt es vor, das man mehrere Instanzen von MonoDevelop unter Mac OS X benötigt. Allerdings wird man feststellen das dies nicht ohne weiteres möglich ist da OS X nur eine Instanz öffnet. Hier hilft es dann im Terminal:

open -n /Applications/MonoDevelop.app

einzugeben. Damit wird das System gezwungen eine neue Instanz von MonoDevelop anzulegen. Eine andere Methode wäre es eine Kopie von MonoDevelop anzulegen und diese z.B. „MonoDevelop 2“ zu nennen, was aber in meinen Augen keinen Sinn macht, da es auf eine Verschwendung von Speicherplatz hinausläuft.

MonoDevelop und das Auswerten von Ausdrücken

Vor einiger Zeit hatte ich einen Artikel darüber geschrieben, was mich an MonoDevelop stört. Seit heute gibt es da noch eine weitere Sache. So kann man in MonoDevelop Ausdrücke und Variablen auswerten, was bei der Entwicklung doch sehr praktisch ist.

Das Fenster zum Überwachen von Ausdrücken und Variablen

Das Fenster zum Überwachen von Ausdrücken und Variablen

Problematisch wird es dann, wenn das Fenster dazu verleitet nach Fehlern zu suchen, die eigentlich nicht existent sind. So kürzt es automatisch den Wert der überwachten Variable ein. Selbst wenn man auf „Kopieren“ drückt, wird nur die gekürzte Fassung in die Zwischenablage geschoben. Dadurch kann es dann passieren das man anstatt:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

den Wert:

"ABCDEFGHIJKLMNOPQRS..."

auswertet. Möchte man an dieser Stelle ganz sicher sein, so hilft nur der umständliche Weg über die Lupe, in welcher der ganze Wert in einem extra Fenster angezeigt wird.