(Sumber: milist DOTNET) generic interface
-
15 Juni 2012 8:48Moderator
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:48Moderator
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.- Ditandai sebagai Jawaban oleh Agnes SannieMicrosoft Contingent Staff, Moderator 15 Juni 2012 8:50
-
15 Juni 2012 8:51Moderator
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.- Ditandai sebagai Jawaban oleh Agnes SannieMicrosoft Contingent Staff, Moderator 15 Juni 2012 8:51