Delen via


out (generic modifier) (C#-verwijzing)

Voor algemene typeparameters geeft het out trefwoord aan dat de typeparameter covariant is. U kunt het out trefwoord gebruiken in algemene interfaces en gemachtigden.

Met covariantie kunt u een meer afgeleid type gebruiken dan dat is opgegeven door de algemene parameter. Dit maakt impliciete conversie mogelijk van klassen die covariantinterfaces implementeren en impliciete conversie van gedelegeerdentypen. Covariantie en contravariantie worden ondersteund voor referentietypen, maar worden niet ondersteund voor waardetypen.

Met een interface met een parameter voor het covarianttype kunnen de methoden meer afgeleide typen retourneren dan de methoden die zijn opgegeven door de typeparameter. Omdat in .NET Framework 4 bijvoorbeeld type IEnumerable<T>T covariant is, kunt u een object van het IEnumerable(Of String) type toewijzen aan een object van het IEnumerable(Of Object) type zonder speciale conversiemethoden te gebruiken.

Aan een covariant gedelegeerde kan een andere gemachtigde van hetzelfde type worden toegewezen, maar met een meer afgeleide algemene typeparameter.

Zie Covariantie en Contravariantie voor meer informatie.

Voorbeeld: algemene covariant-interface

In het volgende voorbeeld ziet u hoe u een algemene covariant-interface declareert, uitbreidt en implementeert. Ook ziet u hoe u impliciete conversie gebruikt voor klassen die een covariant-interface implementeren.

// 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;
    }
}

In een algemene interface kan een typeparameter covariant worden gedeclareerd als deze voldoet aan de volgende voorwaarden:

Voorbeeld: covariant algemene gedelegeerde

In het volgende voorbeeld ziet u hoe u een algemene gemachtigde voor covariant declareert, instantiëren en aanroept. Het laat ook zien hoe u impliciet gedelegeerde typen converteert.

// 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();
}

In een algemene gemachtigde kan een type covariant worden gedeclareerd als deze alleen wordt gebruikt als retourtype methode en niet wordt gebruikt voor methodeargumenten.

C#-taalspecificatie

Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.

Zie ook