Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- 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.
- 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.
- A metódus első paramétere határozza meg a metódus típusát; ezt a módosítóval kell megelőzni.
- A hívókódban adjon hozzá egy direktívát
usinga bővítménymetódus osztályt tartalmazó névtér megadásához. - 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.