Programování

Jak pracovat s metodami rozšíření v C #

Programovací jazyk C # poskytuje podporu pro metody rozšíření z C # 3.0. Metoda rozšíření je ta, která se používá k rozšíření funkčnosti stávajících typů přidáním metod bez nutnosti vytváření nových odvozených typů. Pro práci s metodami rozšíření nemusíte vytvářet podtřídy existujících tříd ani překompilovat či upravovat stávající třídy. Metody rozšíření zlepšují čitelnost vašeho kódu a zároveň vám umožňují rozšířit funkčnost stávajících typů.

Běžné metody rozšíření v .Net zahrnují standardní operátory dotazu LINQ, které přidávají další možnosti dotazu do System.Collections.IEnumerable a System.Collections.Generic.IEnumerable typy. Všimněte si, že můžete využít metody rozšíření k rozšíření třídy nebo rozhraní, ale nemůžete přepsat jejich metody. MSDN uvádí: „Metody rozšíření umožňují„ přidávat “metody ke stávajícím typům bez vytváření nového odvozeného typu, překompilování nebo jiné úpravy původního typu. Metody rozšíření jsou speciální druh statické metody, ale nazývají se, jako by byly metody instance rozšířeného typu. “

Metoda rozšíření je v podstatě speciální typ statické metody a umožňuje vám přidat funkčnost do existujícího typu, i když nemáte přístup ke zdrojovému kódu typu. Metoda rozšíření je stejně jako jiná statická metoda, ale jako první parametr má odkaz „this“. K libovolnému typu můžete přidat libovolný počet metod rozšíření. Nejdůležitější je, že můžete přidat metody rozšíření dokonce k typu hodnoty.

Při práci s metodami rozšíření mějte na paměti tyto body:

  • Metoda rozšíření musí být statická metoda
  • Metoda rozšíření musí být uvnitř statické třídy - třída může mít libovolný název
  • Parametr v metodě rozšíření by měl vždy mít klíčové slovo „this“ předcházející typu, na kterém je třeba metodu volat

Všimněte si, že pokud definujete metodu rozšíření u typu, který má stejný podpis jako jakákoli jiná metoda typu, který rozšiřujete, metoda rozšíření nikdy nebude volána.

Programovací metody rozšíření v C #

V této části prozkoumáme, jak programovat metody rozšíření pomocí C #. Následující výpis kódu ukazuje, jak vypadá metoda rozšíření.

veřejná statická třída StringExtensions

    {

public static bool IsNumeric (tento řetězec str)

        {

dvojitý výstup;

návrat double.TryParse (str, out výstup);

        }

    }

Poznamenejte si první parametr metody rozšíření. Jak již bylo uvedeno, jakákoli metoda rozšíření by měla být statická a měla by mít klíčové slovo „this“ před parametrem, na který má být metoda vyvolána. Když zadáte klíčové slovo „this“ v seznamu parametrů tak, jak bylo zobrazeno ve výše uvedeném příkladu, informujete kompilátor, že pro třídu řetězců byla definována metoda rozšíření.

Zde je ukázka, jak můžete použít metodu rozšíření IsNumeric na instanci řetězce.

static void Main (řetězec [] args)

        {

řetězec str = "100";

if (str.IsNumeric ())

Console.WriteLine ("Objekt řetězce s názvem str obsahuje číselnou hodnotu.");

Console.Read ();

        }

Když provedete výše uvedený program, zobrazí se v okně konzoly zpráva („Objekt řetězce s názvem str obsahuje číselnou hodnotu.“)

Můžete použít metody rozšíření k vložení nové funkce pomocí metod do typu bez nutnosti úpravy, odvození nebo překompilování původního typu. Jak jsem již zmínil, metody rozšíření lze použít také na typy hodnot. Podívejme se, jak toho lze dosáhnout pomocí příkladu.

Následující třída s názvem IntegerExtensions obsahuje metodu rozšíření s názvem IsEven, která vrací true, pokud je celé číslo, na kterém je volána, sudé, jinak false.

veřejná statická třída IntegerExtensions

    {

public static bool IsEven (this int i)

        {

návrat ((i% 2) == 0);

        }

    }

A takto můžete použít metodu rozšíření IsEven na celé číslo.

int n = 2;

if (n.IsEven ())

Console.WriteLine ("Hodnota celého čísla je sudá.");

$config[zx-auto] not found$config[zx-overlay] not found