Sdílet prostřednictvím


out (obecný modifikátor) (Referenční dokumentace jazyka C#)

U parametrů obecného typu určuje klíčové slovo, out že parametr typu je kovariantní. out Použijte klíčové slovo v obecných rozhraních a delegátech.

Kovariance umožňuje použít odvozenější typ, než určuje obecný parametr. Tato funkce umožňuje implicitní převod tříd, které implementují kovariantní rozhraní a implicitní převod typů delegátů. Kovariance a kontravariance podporují odkazové typy, ale nepodporují typy hodnot.

Rozhraní s parametrem kovariantního typu umožňuje jeho metodám vracet více odvozených typů, než které specifikuje parametr typu. Například v .NET, in IEnumerable<T>, typ T je kovariantní, můžete přiřadit objekt IEnumerable<string> typu k objektu IEnumerable<object> typu bez použití speciálních metod převodu.

Kovariantní delegáta můžete přiřadit jinému delegátovi stejného typu, ale s odvozenějším parametrem obecného typu.

Další informace naleznete v tématu Kovariance a Kontravariance.

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Návod

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

Následující příklad ukazuje, jak deklarovat, rozšířit a implementovat kovariantní obecné rozhraní. Také ukazuje, jak použít implicitní převod pro třídy, které implementují kovariantní rozhraní.

// Covariant interface.
interface ICovariant<out R> { }

// Extending covariant interface.
interface IExtCovariant<out R> : ICovariant<R> { }

// Implementing covariant interface.
class Sample<R> : ICovariant<R> { }

class Program
{
    static void Test()
    {
        ICovariant<Object> iobj = new Sample<Object>();
        ICovariant<String> istr = new Sample<String>();

        // You can assign istr to iobj because
        // the ICovariant interface is covariant.
        iobj = istr;
    }
}

V obecném rozhraní deklarujte kovariantní parametr typu, pokud splňuje následující podmínky:

  • Parametr typu použijete pouze jako návratový typ metod rozhraní a nepoužíváte ho jako typ argumentů metody.

    Poznámka:

    Toto pravidlo má jednu výjimku. Pokud kovariantní rozhraní má kontravariantní obecný delegát jako parametr metody, můžete použít kovariantní typ jako parametr obecného typu pro tohoto delegáta. Další informace o kovariantních a kontravariantních obecných delegátech naleznete v tématu Variance in Delegates and Using Variance for Func and Action Generic Delegates.

  • Parametr typu nepoužíváte jako obecné omezení pro metody rozhraní.

Následující příklad ukazuje, jak deklarovat, vytvořit instanci a vyvolat kovariantní obecný delegát. Ukazuje také, jak implicitně převést typy delegátů.

// Covariant delegate.
public delegate R DCovariant<out R>();

// Methods that match the delegate signature.
public static Control SampleControl()
{ return new Control(); }

public static Button SampleButton()
{ return new Button(); }

public void Test()
{
    // Instantiate the delegates with the methods.
    DCovariant<Control> dControl = SampleControl;
    DCovariant<Button> dButton = SampleButton;

    // You can assign dButton to dControl
    // because the DCovariant delegate is covariant.
    dControl = dButton;

    // Invoke the delegate.
    dControl();
}

V obecném delegátu deklarujte kovariantní typ, pokud jej použijete pouze jako návratový typ metody, a ne pro argumenty metody.

Specifikace jazyka C#

Další informace najdete ve specifikaci jazyka C#. Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.

Viz také