Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Gewusst wie: Erstellen einer neuen Methode für eine Enumeration (C#-Programmierhandbuch)

 

Mit Erweiterungsmethoden können Sie Funktionen hinzufügen, die für einen bestimmten Enumerationstyp spezifisch sind.

Beispiel

Im folgenden Beispiel stellt die Grades-Enumeration die möglichen Benotungen (Buchstaben) dar, die ein Student in einem Kurs erhalten kann.  Eine Erweiterungsmethode mit dem Namen Passing wird dem Grades-Typ hinzugefügt, mit dem jede Instanz dieses Typs angewiesen wird, ob der Student mit dieser Benotung den Kurs besteht.  

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace EnumExtension
{
    // Define an extension method in a non-nested static class.
    public static class Extensions
    {        
        public static Grades minPassing = Grades.D;
        public static bool Passing(this Grades grade)
        {
            return grade >= minPassing;
        }
    }

    public enum Grades { F = 0, D=1, C=2, B=3, A=4 };
    class Program
    {       
        static void Main(string[] args)
        {
            Grades g1 = Grades.D;
            Grades g2 = Grades.F;
            Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
            Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");

            Extensions.minPassing = Grades.C;
            Console.WriteLine("\r\nRaising the bar!\r\n");
            Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
            Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");
        }
    }
  }
/* Output:
    First is a passing grade.
    Second is not a passing grade.

    Raising the bar!

    First is not a passing grade.
    Second is not a passing grade.
 */

Beachten Sie, dass die Extensions-Klasse ebenfalls eine statische Variable enthält, die dynamisch aktualisiert wird und dass der Rückgabewert der Erweiterungsmethode den aktuellen Wert dieser Variable darstellt.  Dies zeigt, dass Erweiterungsmethoden im Hintergrund direkt für die statische Klasse aufgerufen werden, in der sie definiert sind.  

Kompilieren des Codes

Um diesen Code auszuführen, kopieren Sie ihn, und fügen Sie ihn in ein Visual C#-Konsolenanwendungsprojekt ein, das in Visual Studio erstellt wurde.  Dieses Projekt gilt standardmäßig für .NET Framework Version 3.5 und hat einen Verweis auf System.Core.dll sowie eine using-Direktive für System.Linq.  Wenn eine oder mehrere dieser Anforderungen im Projekt fehlen, können Sie sie manuell hinzufügen.  Weitere Informationen hierzu finden Sie unter How to: Create a LINQ Project.  

Anzeigen: