mengemukakan yang tidak dijangka: C# dan .NET's Hidden Quirks
Artikel ini meneroka beberapa tingkah laku yang mengejutkan dalam C# dan .NET, menunjukkan keperluan untuk ujian yang ketat dan pertimbangan yang teliti terhadap kes -kes kelebihan.Satu contoh yang menarik melibatkan rentetan rentetan. Pertimbangkan coretan kod ini:
string x = new string(new char[0]); string y = new string(new char[0]); Console.WriteLine(object.ReferenceEquals(x, y));
sebagai output. Walau bagaimanapun, kedua -dua False
dan x
diasingkan sebagai rentetan kosong, yang membawa kepada hasil yang mengejutkan y
. True
. Jika GetType()
adalah jenis yang boleh dibatalkan dan semua kaedah yang ditindas (kecuali T
) dilaksanakan, memanggil GetType()
pada contoh berkotak boleh membuang GetType()
. NullReferenceException
static void Foo<T>() where T : new() { T t = new T(); // ... // This throws a NullReferenceException... Console.WriteLine(t.GetType()); }
adalah jenis rujukan dan memerlukan nilai non-null (T
) yang menunjukkan cabaran halus. Walaupun kekangan T : class, new()
bertujuan untuk menjamin contoh yang tidak nol, ini boleh dilangkau menggunakan ketidakpuasan, sebagai contoh, dengan atribut proksi tersuai yang mengembalikan NULL untuk contoh yang baru dibuat: new()
[MyFunnyProxy] class MyFunnyType : ContextBoundObject { }
Atas ialah kandungan terperinci Apakah beberapa kes sudut yang tidak dijangka di C# dan .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!