Megosztás a következőn keresztül:


Új metódus létrehozása enumeráláshoz (C# programozási útmutató)

A bővítménymetelyekkel egy adott számtípusra jellemző funkciókat adhat hozzá. Az alábbi példában az Grades enumerálás azokat a lehetséges betűjegyeket jelöli, amelyeket egy tanuló megkaphat egy osztályban. A rendszer hozzáad egy elnevezett Passing bővítménymetódust a Grades típushoz, hogy az adott típus minden példánya "tudja", hogy az átmenő osztályzatot jelöl-e.

public enum Grades
{
    F = 0,
    D = 1,
    C = 2,
    B = 3,
    A = 4
};

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

A bővítménymetódus úgy hívható meg, mintha a enum típuson deklarálták volna:

Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine($"First {(g1.Passing() ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing() ? "is" : "is not")} a passing grade.");

Console.WriteLine("\r\nRaising the bar!\r\n");
Console.WriteLine($"First {(g1.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
/* 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.
*/

A C# 14-től kezdődően egy bővítményblokkban deklarálhatja a bővítménytagokat . Az új szintaxis lehetővé teszi bővítménytulajdonságok hozzáadását. Új statikus metódusnak vagy tulajdonságnak tűnő bővítménytagokat is hozzáadhat. Már nem csak a példánymetelyeknek tűnő bővítményekre korlátozódik. Az alábbi példa egy bővítményblokkot mutat be, amely egy példánykiterjesztési tulajdonságot ad hozzá a következőhözPassingMinimumPassingGrade:

public static class EnumExtensions
{
    private static Grades minimumPassingGrade = Grades.D;

    extension(Grades grade)
    {
        public static Grades MinimumPassingGrade
        {
            get => minimumPassingGrade;
            set => minimumPassingGrade = value;
        }

        public bool Passing => grade >= minimumPassingGrade;
    }
}

Ezeket az új bővítménytulajdonságokat úgy hívhatja meg, mintha kiterjesztett típuson deklarálva lennének:

Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine($"First {(g1.Passing ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing ? "is" : "is not")} a passing grade.");

Grades.MinimumPassingGrade = Grades.C;
Console.WriteLine($"\r\nRaising the bar. Passing grade is now {Grades.MinimumPassingGrade}!\r\n");
Console.WriteLine($"First {(g1.Passing ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing ? "is" : "is not")} a passing grade.");
/* 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.
*/

Az új bővítménytagokról a bővítménytagokról szóló cikkben és a kulcsszóra vonatkozóextension nyelvi referenciacikkben talál további információt.

Lásd még