Rumah >pembangunan bahagian belakang >C++ >Mengapa .NET Tidak Dapat Menyimpulkan Jenis Pulangan Kaedah Generik?
Mengapa Kaedah Generik dalam .NET Tidak Boleh Disimpulkan Jenis Pulangannya
Dalam .NET, kaedah generik membenarkan penciptaan kod yang boleh beroperasi pada jenis yang berbeza. Walau bagaimanapun, sekatan khusus dalam bahasa menghalang jenis pemulangan kaedah generik daripada disimpulkan.
Sebabnya
Prinsip utama yang mendasari sekatan ini ialah "dalam- aliran maklumat jenis ke-luar". Apabila menilai ungkapan, jenis maklumat hanya disebarkan ke luar, bukan ke dalam. Ini membolehkan pengkompil menentukan jenis parameter dan argumen, tetapi bukan nilai pulangan kaedah generik.
Demonstrasi
Pertimbangkan kaedah generik berikut:
static TDest Gimme<TSource, TDest>(TSource source) { return default(TDest); }
Jika kita cuba memanggil kaedah ini dengan hujah integer dan mengharapkan nilai pulangan rentetan, pengkompil akan menaikkan ralat:
string dest = Gimme(5); // Error: The return type cannot be inferred
Ini kerana pengkompil tidak boleh menentukan jenis pemulangan Gimme hanya berdasarkan hujah. Ia perlu terlebih dahulu mengetahui jenis pemulangan sebelum ia boleh membuat kesimpulan jenis TDest.
Implikasi dan Kerumitan
Jika maklumat jenis boleh mengalir kedua-dua arah, senario akan timbul di mana pengkompil akan menghadapi cabaran yang tidak dapat diatasi. Pertimbangkan contoh ini:
Kesimpulan
Sekatan untuk membuat kesimpulan jenis pulangan untuk kaedah generik dalam .NET adalah tidak sewenang-wenangnya. Ia merupakan perlindungan penting yang menghalang pengkompil daripada ditimpa senario inferens jenis kompleks dan memastikan keteguhan bahasa.
Atas ialah kandungan terperinci Mengapa .NET Tidak Dapat Menyimpulkan Jenis Pulangan Kaedah Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!