Sdílet prostřednictvím


mimo (Generic modifikátor) (C#-Reference)

Obecný typ parametrů out klíčové slovo určuje, že parametr typu covariant.Můžete použít out klíčové slovo v obecné rozhraní a delegáty.

Kovariance můžete použít typ odvozený více než určený parametrem obecný.To umožňuje implicitní převod třídy, které implementují rozhraní variant a implicitní převod typů delegátů.Kovariance a contravariance jsou podporovány pro typy odkazů, ale nejsou podporovány pro typy hodnot.

Rozhraní covariant typ parametru umožňuje jeho metody vrátit více odvozené typy než zadaný v parametru typu.Například protože v.NET Framework 4, v IEnumerable<T>, je typ t covariant, můžete přiřadit objekt IEnumerabe(Of String) typu objektu IEnumerable(Of Object) typu bez použití jakékoli zvláštní převodu metody.

Covariant delegáta lze přiřadit delegáta jiné stejného typu, ale s více odvozený obecný typ parametru.

Další informace naleznete v tématu Kovariance a Contravariance (C# a Visual Basic).

Příklad

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

// 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é rozhraní mohou být deklarovány parametr typu covariant, pokud splňuje následující podmínky:

  • Parametr typu je použita pouze jako návratový typ metody rozhraní a není použit jako typ argumenty metody.

    [!POZNÁMKA]

    Jedinou výjimkou tohoto pravidla je.Pokud v covariant rozhraní contravariant obecný delegáta jako parametr metody, můžete jako obecný typ parametru typu covariant pro tento delegát.Další informace o covariant a contravariant obecný delegátů, viz Rozptyl Delegáti (C# a Visual Basic) a Použití odchylky pro Func a akce obecný Delegáti (C# a Visual Basic).

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

Následující příklad ukazuje, jak deklarovat konkretizovat a vyvolat covariant obecný delegáta.Také ukazuje, jak delegovat typy implicitně převést.

// 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é delegát typu lze deklarovat covariant, pokud je použita pouze jako návratový typ metody a nejsou použity pro argumenty metody.

Specifikace jazyka C#

Další informace naleznete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

v (Generic modifikátor) (C#-Reference)

Modifikátory (C#-Reference)

Koncepty

Odchylka v obecné rozhraní (C# a Visual Basic)