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 IEnumerableantarmuka, itu akan secara otomatis menjadi iterable oleh satu foreachloop. Itu masuk akal bagi saya, karena didukung oleh antarmuka, dan jika saya memiliki Iteratorfungsi 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 INotifyPropertyChangedmendukung "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 awaitfungsionalitas ke tipe yang ada setelah fakta.
foreachperulangan di awal. Tidak pernah ada persyaratan untuk objek untuk diterapkan IEnumerableuntuk foreachbekerja. Sudah konvensi untuk melakukannya.