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:
<code class="language-csharp">string x = new string(new char[0]); string y = new string(new char[0]); Console.WriteLine(object.ReferenceEquals(x, y));</code>
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
<code class="language-csharp">static void Foo<T>() where T : new() { T t = new T(); // ... // This throws a NullReferenceException... Console.WriteLine(t.GetType()); }</code>
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()
<code class="language-csharp">[MyFunnyProxy] class MyFunnyType : ContextBoundObject { }</code>
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!