Elegant IPB Skin By Skinbox

.NET Base: [FAQ] Was sind Extension Methods? - .NET Base

Zum Inhalt wechseln

Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich

[FAQ] Was sind Extension Methods?

Geschrieben 08. Nov 2009 - 11:45 (#1) Mitglied ist online   Maximilian 

  • capo dei capi
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 816
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Mit den Extension Methods, welche neu im .NET Framework 3.5 sind, ist es Möglich bestehende Objekte um eigene Methoden zu erweitern.
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

Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
0

Geschrieben 08. Nov 2009 - 17:54 (#2) Mitglied ist offline   HyperteX 

  • Profi
  • Blog anzeigen
  • Gruppe: Supermoderatoren
  • Beiträge: 521
  • Registriert: 10. Sep. 09
  • Wohnort: Karlsruhe - Erde
  • OS: Windows 7
  • IDE: Visual Studio 2008

Vielleicht als keine Zusammenfassung:

Merkmale an denen man eine Extension Method erkennen kann:
  • Statische Klasse
  • Statische Methode
  • this vor dem ersten Parameter


Vorteil allgemein gegenüber dem klassischen Erben und erweitern einer Klasse:
Es können auch Klassen erweitert werden, welche nicht von einem selber stammen und man braucht nicht eine neue Klasse einführen nur wegen einer Methode.

Man kann übrigens auch bestehende Methode überladen und so die Klasse erweitern. ASP.NET MVC arbeitet beispielsweise an sehr sehr vielen Stellen damit.
Ich kann alles, außer VB.NET
0

Thema verteilen:


Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich


Seite 1 von 1
Trackbacks
Trackback URL Trackback Date Total Hits
Not Available 08. Mrz. 2010 19:20 1
extension method vb.net - Google-Suche 08. Feb. 2010 08:29 1
Seite 1 von 1

Similar Topics
  Thema Themenstarter Statistik Letzter Beitrag
No similar topics were found

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0


Enter your sign in name and password


Sign in options
Mit OpenID anmelden   Or sign in with these services