Warning: Constant ABSPATH already defined in /customers/e/7/0/florian-oeser.de/httpd.www/wordpress/wp-config.php on line 28 Development-Blog von Florian Oeser

HowTo: Extension Methods

17. Februar 2009 – 22:01

Dieses How-To wurde ebenfalls auf XNA.mag veröffentlicht und kann auch dort diskutiert werden.

Einleitung

In diesem kleinen How-To möchte kurz erklären was Extension Methods sind, wie man sie anwendet und auf was man achten muss.

Umsetzung

Was sind überhaupt Extension Methods?

Extension Methods sind integraler Bestandteil von C# 3.0 und dem .Net-Framework  3.5!Diese Methoden erlauben es vorhandene Typen zu erweitern, ohne eine abgeleitete Klasse zu implementieren oder den ursprünglichen Typ erneut kompilieren zu müssen. Extension Methods sind spezielle statische Methoden werden aber wie Instanzmethoden aufgerufen. Instanzmethoden haben aber Vorrang gegenüber Extension Methods, dass heißt eine vorhandene Methode kann nicht durch eine Extension Method ersetzt werden. Weiterhin können sie nur auf öffentliche Member und Methoden des Types den sie erweitern zugreifen, da sie sonst das Prinzip der Kapselung verletzt werden  würden.

Kleines Beispiel gefällig?
namespace ExtensionMethods
{
   public static class Extensions
  {
      public static string EliminateWhiteSpace(this string param)
     {
        return param.Replace(' ', string.Empty);
     }
  }
}

Der erste Paramter in einer Extension Method wird mit dem Operator this versehen und entspricht dem Typ auf dem die Extension Method angewendet wird. In diesem Falle string. Die Klasse und die eigentliche Methode muss static sein.

Wie verwendet man jetzt diese Methode:

using ExtensionMethods;

namespace ConsoleApplication
{
    class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Hallo Welt!".EliminateWhiteSpace());
         Console.ReadLine();
      }
   }
}

Das  funktioniert da der Compiler die Extension Methods auflöst wenn der Namespace, in dem die Extension Method definiert wurde, an der gewünschten Stelle eingebunden wurde.  Das Einbinden des Namespaces ist wichtig und muss explizit geschehen. Wie erwähnt wird also die Extension Method wie eine Instanzmethode aufgerufen, liegt aber nach dem kompilieren  in der IL (intermediate language) als statischer Aufruf vor. Im Endeffekt wird also daraus:

Console.WriteLine(Extensions.EliminateWhiteSpace("Hallo Welt!"));

Ein weiteres Beispiel, welches nicht ganz so konstruiert ist. Bei der Spiele/Grafikprogrammierung ist es wichtig zu wissen wieviel Zeit zwischen zwei Frames (Bildern) vergangen ist. Das sieht folgendermaßen aus:

float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;

Die Extension Method dazu:

public static float GetElapsedSeconds(this GameTime gameTime)
{
    return (float)gameTime.ElapsedGameTime.TotalSeconds;
}

Und nun der neue Aufruf:

float dt = gameTime.GetElapsedSeconds();

Conclusion

Extension Methods bieten eine gute Möglichkeit vorhande Funktionlität zu erweitern und lassen sich im ‚Client-Code‘ intuitiv einsetzen. Weiterhin verbessert sich zumeist die Lesbarkeit des Codes (syntaktischer Zucker). Trotzdem sollte man sparsam mit ihnen umgehen und sie nur anwenden wenn sie unbedingt benötigt werden, da es schnell zu Wildwuchs kommen kann und der Code schlecht wartbar wird.

Interessante Links/Quellen

MSDN Prgramming Guide zu Extension Methods

C# 3.0 Extension Methods

Extension Methods und genauerer IL-Betrachtungen

Extension Methods in Bezug auf XNA

Extension Methods in Bezug auf XNA 2

Extension Methods in Bezug auf XNA 3

Socket Server/Client zur Bildübertragung mit C unter Linux/Unix-OS

30. Januar 2009 – 17:38

Jüngst habe ich einen kleinen, leichtgewichtigen Server und Client zur Bildübertragung geschrieben. Das ganze ist Socketbasierend(TCP) und sollte auf allen Linux/Unix-Distributionen kompilier- und lauffähig sein.

Bestandteil der Arbeit ist weiterhin ein Kommunikationsprotokoll, welches den Ablauf der Übertragung regelt bzw. beschreibt. So wird in diesem Dokument unter anderem geklärt, wie die zu übertragenden Metadaten auszusehen haben oder wie mit eventuell auftretenten Fehlern umzugehen ist. Das sichert eine stabile und fehlerfreie Bildübertragung ab.

Die Umsetzung war nicht immer ganz einfach und es gab einige Tücken zu überwinden. Gerade die im Protokoll beschrieben Timeouts machten mir anfangs Sorgen und es dauerte bis ich eine entsprechende Lösung gefunden bzw. auch richtig umgesetzt hatte. Es gab zwar hier und da auch noch ein paar andere Probleme, welche aber meist auf die eingerosteten C-Kenntnisse und deren Kniffe meinerseits zurückzuführen waren. Auch egal nun bin ich ja fertig, es läuft alles perfekt und man ist wieder eine Erfahrung reicher geworden 🙂

Hier nun der Source, das Kommunikationsprotokoll und direkt auch das MonoDevelop-Projekt:

C-Socket Server/Client zur Bildübertragung (.rar, 250KB)

Interessante/Weiterführende Links zum Thema

Snipplets Sockets unter C

Client-Server Socketprogrammierung

Tipps zur Socketprogrammierung

Helmut Herold – Linux/Unix-Systemprogrammierung

Unix Network Programming

Wie immer keine Garantie auf Richtigkeit der Vollständigkeit!

Softwareergonomische Analyse zu eBay.de

14. Januar 2009 – 18:14

Im Rahmen der Lehrveranstaltung Human Computer Interaction habe ich wieder eine Softwareergonomische Analyse durchgeführt. Diesmal ist es eine Mischung aus Heuristischer Evaluation und Konformitätstest auf Grundlage der Beta-Oberfläche von eBay.de!

Aufgabenstellung war es, verschiedene Interaktionselemente bzw. Dialoge, durch ein freigewähltes Usability-Testverfahren auf Aspekte wie Form, Farbwahl, Positionierung etc. hin zu überprüfen. Die Ergebnisse wurden in einem Prüfprotokoll festgehalten welches diese Aspekte bewertet, kommentiert und Verbesserungsvorschläge aufzeigt.

Dieses Prüfprotokoll und die Präsentation möchte ich euch wieder zum freien Download zur Verfügung stellen.

Analyse eBay.de (.rar, 1,2MB)

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!

NVIDIA GPU Gems 3 veröffentlicht

15. Dezember 2008 – 17:39

Nachdem NVIDIA auch die ersten beiden Teile der GPU Gems Reihe veröffentlicht hat, wird das aktuelle Juwel nun seit letzter Woche ebenfalls veröffentlicht und somit jedem kostenlos zur Verfügung gestellt. Wöchentlich werden jetzt drei Kapitel auf der Entwicklerseite von NVIDIA publiziert. Der CD-Inhalt dürfte wie bei den Vorgängern nicht allzu lange auf sich warten lassen 😉

Link: GPU Gems 3

Der Vollständigkeit halber noch die Links zur den ersten beiden Büchern:

GPU Gems 1
GPU Gems 2

Tja vielleicht sollte sich der Charles-River-Media Verlag sich daran mal ein Beispiel nehmen und die zumindest älteren Teile der bekannten GameProgrammingGems-Reihe frei veröffentlichen, statt diese noch als teure Bundles zu verkaufen!

In diesem Sinne viel Spass beim Lesen 😉

eXtreme Programming vs. V-Modell

4. Dezember 2008 – 16:14

Im Rahmen der Lehrveranstaltung IT-Projektmanagement wurde von Fabian Hässelbarth und mir ein Vortrag zum Thema ‚Vergleich: XP und V-Modell‘ ausgearbeitet und gehalten.

Wir möchten euch die Präsentation und das Handout zum freien Download zur Verfügung stellen.

Inhalt der Präsentation und des Handout’s ist die kurze Vorstellung beider Modelle sowie der eigentliche Vergleich.

Präsentation + Handout (.zip, 224KB)

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!