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


Egyéni bővítménymetódus implementálása és meghívása (C# programozási útmutató)

Ez a cikk bemutatja, hogyan implementálhatja a saját bővítménymetszeteit bármely .NET-típushoz. Az ügyfélkód használhatja a bővítménymetelyeket. Az ügyfélprojekteknek hivatkoznia kell az őket tartalmazó szerelvényre. Az ügyfélprojekteknek hozzá kell adniuk egy olyan, a bővítménymetelyek definiálásához használt névteret meghatározó irányelvet .

A bővítménymetódus definiálása és meghívása:

  1. Adjon meg egy statikus osztályt , amely tartalmazza a bővítménymetódust. Az osztály nem ágyazható be egy másik típusba, és láthatónak kell lennie az ügyfélkódban. További információ az akadálymentességi szabályokról: Access Modifiers.
  2. Implementálja a bővítménymetódust statikus módszerként, legalább ugyanolyan láthatósággal, mint az azt tartalmazó osztály.
  3. A metódus első paramétere határozza meg a metódus típusát; ezt a módosítóval kell megelőzni.
  4. A hívókódban adjon hozzá egy direktívát using a bővítménymetódus osztályt tartalmazó névtér megadásához.
  5. A metódusok meghívása példánymeteként a típuson.

Feljegyzés

Az első paraméter nem a kód meghívásával van megadva, mert az azt a típust jelöli, amelyre az operátort alkalmazza, és a fordító már ismeri az objektum típusát. Csak a 2–2 n. paraméter argumentumait kell megadnia.

Az alábbi példa egy kiterjesztési metódust WordCount implementál a CustomExtensions.StringExtension osztályban. A metódus az String osztályon működik, amely az első metódusparaméterként van megadva. A CustomExtensions névtér importálása az alkalmazás névterébe történik, a metódus pedig a Main metóduson belül lesz meghívva.

using CustomExtensions;

string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");


namespace CustomExtensions
{
    // Extension methods must be defined in a static class.
    public static class StringExtension
    {
        extension(string str)
        {
            // This is the extension member.
            // The `str` parameter is declared on the extension declaration.
            public int WordCount()
            {
                return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
            }
        }
    }
}

A túlterhelés felbontása a típus által definiált példány- vagy statikus metódust részesíti előnyben a kiterjesztési metódusokkal szemben. A bővítménymetelyek nem férnek hozzá a kiterjesztett osztályban lévő személyes adatokhoz.

Lásd még