.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

C# Extension Methods

Letzter Beitrag 05-14-2008 11:55 von FantaMango77. 5 Antworten.
Seite 1 von 1 (6 Treffer)
Beiträge sortieren: Zurück Weiter
  • 04-19-2008 0:35

    C# Extension Methods

    Hi,

    setzt jemand von euch bereits Extension Methods ein?
    Ich pers. vermeide es (derzeit?) noch diese einzusetze, obwohl ich sagen muss dass die Möglichkeiten die einem dadurch offen stehen schon Cool sind, andererseits bin ich mir eben nicht sicher weil mir nicht 100% klar ist wie es z.B. mit Überladungen aussieht  bzw ob man die  dann noch Überschreiben  kann oder wie man Zugriff und Sichtbarkeit steuern kann.

    Danke und LG
    Edmund
    Abgelegt unter:
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 04-19-2008 10:08 Antwort zu

    • KaiGloth
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 04-15-2008
    • Göttingen
    • Beiträge 9
    • Punkte 95
    • Moderator

    AW: C# Extension Methods

    Hallo Edmund,

    ich arbeite bereits hier und da mit Extension Methods. Wo genau ist dein Verständnisproblem bei einer Überladung?

    --
    Gruß,
    Kai

    http://blog.veloursnebel.de
    • Beitragspunkte: 35
    • IP-Adresse ist Registriert
  • 04-19-2008 10:52 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 450
    • Punkte 6.769
    • ForumsAdministrator

    AW: C# Extension Methods

    Hallo, auch ich arbeite mit Extension Methods. Aber nur dort wo sie sinnvoll sind.

    Beispiel:

    Ich habe Objekte, die grundsätzlich alle vom gleichen Basistyp sind und serialisiert (XML) werden müssen, d.h. es gibt eine Extension Method ToXml. Wenn diese generisch genug ist, kann sie mit allem umgehen und muss daher nur einmal implementiert werden.

    Ein Problem hast du natürlich immer dann, wenn in einer Klasse (deren Typ eine Extension Method umgebunden bekam) ebenfalls eine Methode ToXml implementiert wird. Damit würde die Extension Method "überschrieben" werden, d.h. diese wird zukünftig nicht mehr aufgerufen. Das kann mitunter jedoch relativ "gefährlich" werden, wenn von einem anderen Verhalten ausgegangen wird ...

    Abgelegt unter:
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 04-19-2008 20:53 Antwort zu

    AW: C# Extension Methods

    Hallo Kai,

    ich schicks zur Erinnerung noch einmal voraus, ich habe Extension Methods noch nicht eingesetzt, also nicht zu streng mit mir verfahren Wink

    Aber vielen Dank dass du dich meiner Frage annehmen willst.

    Also zu meinem Verständnisproblem:

    Wenn ich Beispielsweise eine Extension Method   DebugOutput(Logger,LoggingContext) implementiere und dann zusätzlich eine Überladung mit einem default Logger implementiere ( damit beim Aufruf der Überladung nur mehr den LoggingContext übergeben werden kann ) wie kann ich dann die "Basis" aufrufen, damit alle Überladungen die einzige Ausimplementierte Methode aufrufen? ... Alle Überladungen sollen eine Methode mit der kompletten Parameterliste aufrufen.

     

    Danke und LG

    Edi

    • Beitragspunkte: 35
    • IP-Adresse ist Registriert
  • 04-24-2008 12:55 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 450
    • Punkte 6.769
    • ForumsAdministrator

    AW: C# Extension Methods


    Kannst du ein Beispiel dafür geben was genau du vor hast? Irgendwie kann ich es mir noch nicht 100%ig vorstellen, wohin es gehen soll ...
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 05-14-2008 11:55 Antwort zu

    • FantaMango77
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05-07-2008
    • Magdeburg, DE
    • Beiträge 82
    • Punkte 1.540
    • Moderator

    AW: C# Extension Methods

    Hallo Edmund,

    Für Extension Methods brauchst du zuallererst einen Typ, den du erweitern willst. In einem Beispiel gehe ich mal vom Typ string aus.
    Wenn ich dich richtig verstanden habe, möchtest du so etwas erreichen:

    "Hello world".DebugOutput("Logging Context");
    
    // oder
    
    "Hello world".DebugOutput(new SpecialLogger(), "Logging Context");
    
    Im ersten Fall wird ein Standard-Logger verwendet und im zweiten Fall ein spezieller, der beim Aufruf mitgegeben wird.

    Damit das Ganze funktionert, brauchst du eine statische Klasse, in der die Methode DebugOutput() in zwei Varianten folgenderweise (oder ähnlich) existieren:

    public static class LoggingExtensions
    {
    	public static void DebugOutput(this string s, object context)
    	{
    		ILogger defaultLogger = GetDefaultLogger();
    
    		s.DebugOutput(defaultLogger, context);
    	}
    
    	public static void DebugOutput(this string s, ILogger logger, object context)
    	{
    		logger.Log(s, context);
    	}
    
    	private static ILogger GetDefaultLogger()
    	{
    		return new DefaultLogger();
    	}
    }
    Der Vollständigkeit halber hier noch das ILogger-Interface und die ILogger-Ableitungen:

    public interface ILogger
    {
    	void Log(string message, object context);
    }
    
    public class DefaultLogger : ILogger
    {
    	public void Log(string message, object context)
    	{
    		Console.WriteLine("Geloggt mit DefaultLogger: {0}", message);
    	}
    }
    
    public class SpecialLogger : ILogger
    {
    	public void Log(string message, object context)
    	{
    		Console.WriteLine("Geloggt mit SpecialLogger: {0}", message);
    	}
    }
    

    Wie du siehst, sind Überladungen mit Extension Methods kein Problem.

    Ciao,
    Jens
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (6 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions