Der Übersichtlichkeit halber sollten die Extension Methods in einen eigenen Namespace ausgelagert werden, welcher dann nur bei Bedarf eingebunden werden kann um die entsprechenden Objekte mit den Erweiterungsmethoden zu bestücken. Es ist auf diese weise jedoch nicht möglich bestehende Methoden in den Objekten mit dem gleichen Namen zu überschreiben, diese werden immer exklusiv behandelt und die Erweiterungen dadurch ignoriert.
Um das ganze noch an einem Beispiel festzumachen, erweitere ich nun das Imageobjekt um die Methode "shrinkImage" welche die größe des Bildes reduziert bzw. erhöht:
Visual C#
using System.Drawing;
namespace myApp.myExtensions
{
public static class Extensions
{
public static Image shrinkImage(this Image image, Size newSize)
{
Bitmap retval = new Bitmap(newSize.Width, newSize.Height);
using (Graphics g = Graphics.FromImage(retval))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.DrawImage(image, new Rectangle(new Point(0, 0), newSize));
}
return retval;
}
}
}
Der erste Parameter in der Methode startet mit einem "this" beschreibt nachfolgend das Objekt für welches die Erweiterungsmethode gültig ist. Über diesen wird auch auf das Quellobjekt zugegriffen. Danach folgen optional, wie bei einer normalen Methode die Parameter welche die Informationen enthalten mit denen die Methode arbeiten soll.
Aufgerufen wird die Methode dann wie folgt:
Visual C#
using System.Drawing;
using myApp.Extensions;
// [...]
var image = Image.FromFile("<Pfad zum Bild>").shrinkImage(new Size(48, 48));
Dieser Beitrag wurde von Maximilian bearbeitet: 08. Nov 2009 - 12:15


Hilfe




.











RSS Feed