Rumah > pembangunan bahagian belakang > C++ > Kenapa beberapa C# dan .NET Corner Cases menentang jangkaan?

Kenapa beberapa C# dan .NET Corner Cases menentang jangkaan?

Barbara Streisand
Lepaskan: 2025-01-24 18:02:14
asal
768 orang telah melayarinya

Why Do Some C# and .NET Corner Cases Defy Expectations?

meneroka tingkah laku yang tidak dijangka dalam C# dan .net

Bangunan aplikasi yang mantap memerlukan pemahaman yang mendalam tentang kes -kes kelebihan. C# dan .NET, sementara berkuasa, mempersembahkan beberapa senario mengejutkan yang mencabar andaian yang sama. Mari kita periksa beberapa contoh yang menggambarkan tingkah laku yang luar biasa ini:

Bila tidak menghasilkan objek baru new

Pertimbangkan kod ini yang seolah -olah mudah:

string x = new string(new char[0]);
string y = new string(new char[0]);
Console.WriteLine(object.ReferenceEquals(x, y)); // Prints True
Salin selepas log masuk
seseorang mungkin mengharapkan

sentiasa membuat objek yang berbeza untuk jenis rujukan. Walau bagaimanapun, pengendalian rentetan kosong C#membawa kepada new dan x merujuk objek yang sama. y

Jenis -jenis yang tidak dapat dipertahankan dan

NullReferenceException Coretan kod ini menyoroti interaksi yang membingungkan dengan jenis yang tidak dapat dibatalkan:

Walaupun
static void Foo<T>() where T : new()
{
    T t = new T();
    Console.WriteLine(t.GetType()); // Throws NullReferenceException
}
Salin selepas log masuk
dimulakan, memanggil

melemparkan t. Ini kerana jika GetType() adalah jenis yang boleh dibatalkan (seperti NullReferenceException), tinju tersirat ke T boleh menghasilkan nilai null, menyebabkan pengecualian apabila int? dipanggil pada null berkotak. object GetType()

kes NULL

contoh new Senario ini menunjukkan kemungkinan yang kurang intuitif:

Kekangan mencadangkan
public static void CanThisHappen<T>() where T : class, new()
{
    var instance = new T(); // new() on a ref-type; should be non-null
    Debug.Assert(instance != null, "How did we break the CLR?");
}
Salin selepas log masuk
adalah jenis rujukan instantiible dengan

. Walau bagaimanapun, teknik seperti remoting (mis., Menggunakan proksi yang mengembalikan null) boleh memintas jangkaan ini, yang membawa kepada penegasan yang gagal. Ini menyoroti kerumitan yang diperkenalkan apabila berurusan dengan ciri -ciri canggih seperti remoting. T

Atas ialah kandungan terperinci Kenapa beberapa C# dan .NET Corner Cases menentang jangkaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan