Di C #, saya mulai melihat semua metode ajaib ini muncul, tanpa didukung oleh antarmuka. Mengapa ini dipilih?
Biarkan saya jelaskan.
Sebelumnya di C #, jika suatu objek mengimplementasikan IEnumerable
antarmuka, itu akan secara otomatis menjadi iterable oleh satu foreach
loop. Itu masuk akal bagi saya, karena didukung oleh antarmuka, dan jika saya memiliki Iterator
fungsi saya sendiri di dalam kelas yang diulangi, saya bisa melakukannya tanpa khawatir bahwa itu secara ajaib akan berarti sesuatu yang lain.
Sekarang, tampaknya, (tidak yakin kapan), antarmuka ini tidak lagi diperlukan. Itu hanya perlu memiliki konversi penamaan yang tepat.
Contoh lain adalah membuat objek apa pun ditunggu dengan memiliki metode yang dinamai persis GetAwaiter
yang memiliki beberapa properti tertentu.
Mengapa tidak membuat antarmuka seperti sebelumnya IEnumerable
atau INotifyPropertyChanged
mendukung "sihir" ini secara statis?
Lebih detail tentang apa yang saya maksud di sini:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Apa pro dan kontra dari metode sulap, dan adakah di mana pun secara online di mana saya dapat menemukan apa pun tentang mengapa keputusan ini dibuat?
async
/ await
, maka itu hanya akan bekerja dengan kode yang ditulis setelah .NET 4.5 menjadi cukup luas untuk menjadi target yang layak ... yang pada dasarnya sekarang. Tetapi terjemahan sintaksis murni ke panggilan metode memungkinkan saya untuk menambahkan await
fungsionalitas ke tipe yang ada setelah fakta.
foreach
perulangan di awal. Tidak pernah ada persyaratan untuk objek untuk diterapkan IEnumerable
untuk foreach
bekerja. Sudah konvensi untuk melakukannya.