Rumah >pembangunan bahagian belakang >C++ >Mengapa .NET Infer Return Types tidak boleh dalam Kaedah Generik?

Mengapa .NET Infer Return Types tidak boleh dalam Kaedah Generik?

Patricia Arquette
Patricia Arquetteasal
2025-01-03 22:06:39281semak imbas

Why Can't .NET Infer Return Types in Generic Methods?

Mengapa Jenis Pemulangan Kaedah Generik Tidak Boleh Disimpulkan dalam .NET

Dalam .NET, kaedah generik tidak boleh disimpulkan jenis pulangannya. Sekatan ini dikuatkuasakan untuk menghalang inferens jenis daripada mengalir "kedua-dua arah" dalam ungkapan, yang boleh membawa kepada letupan gabungan kemungkinan gabungan jenis.

Contoh

Pertimbangkan kaedah generik berikut:

static TDest Gimme<TSource, TDest>(TSource source)
{
    return default(TDest);
}

Jika inferens jenis pulangan dibenarkan, kod berikut akan menjadi sah:

string dest = Gimme(5);

Walau bagaimanapun, kod ini akan mengakibatkan ralat pengkompil kerana jenis pemulangan Gimme tidak boleh disimpulkan daripada jenis hujah int.

Penaakulan

Alasan di sebalik sekatan ini adalah untuk mengelakkan situasi di mana maklumat jenis mengalir kedua-dua dari dalam dan luar ungkapan. Pertimbangkan senario berikut:

Senario 1: Lebihan Berbilang

Andaikan kita mempunyai sepuluh lebihan kaedah N dengan jenis hujah yang berbeza. Jika kami membenarkan inferens jenis pulangan untuk kaedah generik, kami perlu membuat kesimpulan jenis pulangan G dalam ungkapan N(G(5)). Ini memerlukan mempertimbangkan kesemua sepuluh bebanan N dan memilih yang "terbaik". Walau bagaimanapun, kriteria untuk menentukan beban berlebihan "terbaik" adalah tidak jelas, yang membawa kepada potensi kekaburan.

Senario 2: Ungkapan Bersyarat

Pertimbangkan ungkapan double x = b ? G(5) : 123. Jika inferens jenis pulangan dibenarkan, kita perlu menentukan jenis pulangan G berdasarkan jenis ungkapan bersyarat (berganda). Walau bagaimanapun, ini tidak akan mengambil kira kemungkinan jenis pulangan G mungkin perlu ditukar secara tersirat kepada jenis hujah ungkapan bersyarat (int).

Senario 3: Ungkapan Bersarang

Jika kita menggabungkan berbilang ungkapan bersyarat dan panggilan kaedah, seperti dalam ungkapan N(N(b ? G(5)) * G("hello") : 123)), kerumitan inferens jenis pulangan meningkat secara eksponen. Kita perlu mempertimbangkan semua kemungkinan lebihan G dan N dalam kombinasi, yang membawa kepada letupan kemungkinan kombinasi jenis.

Kesimpulan

Dengan melarang inferens jenis pulangan untuk generik kaedah, .NET menghalang letupan gabungan ini dan memastikan jenis inferens mengalir dengan cara yang boleh diramal dan konsisten.

Atas ialah kandungan terperinci Mengapa .NET Infer Return Types tidak boleh dalam Kaedah Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn