Rumah >pembangunan bahagian belakang >C++ >Apakah beberapa kes sudut yang tidak dijangka di C# dan .NET?
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>Intuitif, seseorang mungkin menjangkakan
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>Tambahan pula, kekangan generik di mana
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>Contoh -contoh ini menggambarkan potensi untuk tingkah laku yang tidak dijangka dalam kerangka C# dan .NET. Ujian menyeluruh dan kesedaran yang mendalam mengenai kes kelebihan adalah penting untuk pembangunan aplikasi yang mantap dan boleh dipercayai.
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!