(Sumber: milist DOTNET) generic interface

Jawab (Sumber: milist DOTNET) generic interface

  • 15 Juni 2012 8:48
    Moderator
     
     

    Halo

    Saya mau tanya apa artinya 'out' di generic interface seperti :
    public interface IMyinterface<out T>
    lalu apa bedanya dengan : public interface IMyinterface<T>    ?
    Terima kasih sebelumnya.


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

Semua Balasan

  • 15 Juni 2012 8:48
    Moderator
     
     Jawab

    Jawabannya yaitu ada di istilah covariance & contravariance...nah coba diselidiki dulu kedua istilah tersebut :)

    Dijawab oleh: Rully Yulian


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

  • 15 Juni 2012 8:51
    Moderator
     
     Jawab

    ya betul, berkaitan tentang variance mode.

    sekilas pandang kira2 begini :

    keyword in dan out adalah suatu keyword yang membuat suatu type dari generic parameter menjadi variance.

    out untuk membuat suatu type menjadi covariance.

    in untuk membuat suatu type menjadi contravariance.

    covariance dan contravariance disini adalah suatu konsep hubungan antar type.

    misalnya pada type2 berikut.

    class A {}

    class B : class A {}

    class B merupakan covariance dari class A.

    class A merupakan contravariance dari class B.

    dan class A dan class B adalah variance.

    apabila kita punya type2 berikut :

    interface Z<T> {}

    class A {}

    class B : A {}

    class C : Z<B> {}

    maka apa bila kita punya code berikut :

    Z<B> interfaceZB = new C();

    Z<A> interfaceZA = interfaceZB; //error

    akan menyebabkan error, karena kita belum secara explicit memberitau bahwa class B dan A adalah variance. 

    untuk memperbaikinya, maka pada deklarasi interface Z kita harus define keyword in atau out 

    dgn tujuan untuk mendeklarasikan type paramater dari interface Z sebagai variance.

    dan karena interfaceZB generic typenya bertipe B, 

    dan ingin kita assign ke interfaceZA yg generic typenya bertipe A,

    yg berarti B merupakan covariance dari class A, maka kita harus define generic type dari interface Z sebagai 

    covariance dengan menambahkan keyword out :

    interface Z<out T> {};

    maka kode berikut tidak akan error lagi.

    Z<B> interfaceZB = new C();

    Z<A> interfaceZA = interfaceZB; //tidak error

    Dijawab oleh: Agus Syahputra


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.