Bagikan melalui


keluar (pengubah generik) (Referensi C#)

Untuk parameter jenis generik, kata kunci out menetapkan bahwa parameter jenis adalah kovarian. Anda dapat menggunakan kata kunci out di antarmuka generik dan delegasi.

Kovarians memungkinkan Anda untuk menggunakan jenis turunan daripada yang ditentukan oleh parameter generik. Hal ini memungkinkan konversi implisit kelas yang mengimplementasikan antarmuka kovarian dan konversi implisit jenis delegasi. Kovarian dan kontravarian didukung untuk jenis referensi, tetapi tidak didukung untuk jenis nilai.

Antarmuka yang memiliki parameter jenis kovarian memungkinkan metodenya mengembalikan lebih banyak jenis turunan daripada yang ditentukan oleh jenis parameter. Misalnya, karena di .NET Framework 4, di IEnumerable<T>, jenis T adalah kovarian, Anda dapat menetapkan objek berjenis IEnumerable(Of String) ke objek berjenis IEnumerable(Of Object) tanpa menggunakan metode konversi khusus apa pun.

Delegasi kovarian dapat diberikan delegasi lain dengan jenis yang sama, tetapi dengan parameter jenis generik yang diturunkan.

Untuk informasi selengkapnya, lihat Kovarian dan Kontravarian.

Contoh - antarmuka generik kovarian

Contoh berikut menunjukkan cara mendeklarasikan, memperluas, dan mengimplementasikan antarmuka generik kovarian. Ini juga menunjukkan cara menggunakan konversi implisit untuk kelas yang menerapkan antarmuka kovarian.

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

Dalam antarmuka generik, parameter jenis dapat dideklarasikan sebagai kovarian jika memenuhi kondisi berikut:

  • Parameter jenis hanya digunakan sebagai jenis pengembalian metode antarmuka dan tidak digunakan sebagai jenis argumen metode.

    Catatan

    Ada satu pengecualian untuk aturan ini. Jika dalam antarmuka kovarian Anda memiliki delegasi generik kontravarian sebagai parameter metode, Anda dapat menggunakan jenis kovarian sebagai parameter jenis generik untuk delegasi ini. Untuk informasi selengkapnya tentang delegasi generik kovarian dan kontravarian, lihat Varian dalam Delegasi dan Menggunakan Varians untuk Delegasi Generik Fungsi dan Tindakan.

  • Parameter jenis tidak digunakan sebagai batasan umum untuk metode antarmuka.

Contoh - delegasi generik kovarian

Contoh berikut menunjukkan cara mendeklarasikan, instantiate, dan memanggil delegasi generik kovarian. Ini juga menunjukkan cara mengonversi jenis delegasi secara implisit.

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

Dalam delegasi generik, suatu jenis dapat dideklarasikan sebagai kovarian jika digunakan hanya sebagai jenis pengembalian metode dan tidak digunakan untuk argumen metode.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga