out (általános módosító) (C# referencia)

Általános típusparaméterek esetén a out kulcsszó azt határozza meg, hogy a típusparaméter kovariant. Használja a kulcsszót out általános felületeken és meghatalmazottakban.

A kovariancia lehetővé teszi, hogy az általános paraméter által megadottnál származtatottabb típust használjon. Ez a funkció lehetővé teszi a kovariant interfészeket megvalósító osztályok implicit átalakítását és a delegált típusok implicit konvertálását. A kovariancia és a contravariance támogatja a referenciatípusokat, de nem támogatják az értéktípusokat.

A kovariant típusú paraméterrel rendelkező interfészek lehetővé teszik a metódusok számára, hogy a típusparaméter által megadottaknál több származtatott típust adjanak vissza. Mivel például a .NET-ben IEnumerable<T>a T típus kovarianciáns, speciális átalakítási módszerek használata nélkül rendelhet hozzá egy ilyen típusú objektumot IEnumerable<string>IEnumerable<object> .

Kovátriai delegáltat hozzárendelhet egy másik, azonos típusú delegálthoz, de származtatottabb általános típusparaméterrel.

További információ: Kovariancia és kontravariancia.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Az alábbi példa bemutatja, hogyan deklarálhat, bővíthet és implementálhat egy kovariantikus általános felületet. Azt is bemutatja, hogyan használhat implicit konverziót a kovariantikus felületet implementáló osztályokhoz.

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

Egy általános felületen deklaráljon egy kovarians típusparamétert, ha megfelel a következő feltételeknek:

  • A típusparamétert csak az interfészmetódusok visszatérési típusaként használja, és nem használja metódusargumentumok típusaként.

    Megjegyzés:

    Ez a szabály egyetlen kivételt képez. Ha egy kovariant felület metódusparaméterként contravariant generic delegáltat használ, a kovariant típust általános típusparaméterként használhatja ehhez a delegálthoz. A kovariant és a contravariant általános meghatalmazottakról további információt a Delegáltak varianciája és a Variance használata func és action generic meghatalmazottakhoz című témakörben talál.

  • A típusparamétert nem használja általános kényszerként a felületi metódusokhoz.

Az alábbi példa bemutatja, hogyan deklarálhat, hozhat létre és hívhat meg kovariant általános meghatalmazottat. Azt is bemutatja, hogyan konvertálhat implicit módon delegált típusokat.

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

Egy általános meghatalmazottban deklaráljon egy kovarians típust, ha csak metódus-visszatérési típusként használja, és nem metódusargumentumokhoz.

C# nyelvspecifikáció

További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még