Rumah >pembangunan bahagian belakang >C++ >Apakah Gelagat Mengejutkan yang Boleh Anda Hadapi dengan C# dan .NET Corner Cases?
Melancarkan kes yang tidak dijangka: C# dan .NET Corner Cases
Pembangunan perisian sering membentangkan kelainan yang mengejutkan. Artikel ini meneroka beberapa kes sudut yang menarik dalam C# dan .NET yang boleh mencabar pemaju yang berpengalaman.mari kita mulakan dengan peruntukan objek rentetan kosong:
<code class="language-csharp">string x = new string(new char[0]); string y = new string(new char[0]); Console.WriteLine(object.ReferenceEquals(x, y)); // Outputs True</code>Ini menghairankan output
, menunjukkan bahawa True
dan x
merujuk objek yang sama. Ini disebabkan oleh pengoptimuman: Membuat rentetan kosong menggunakan semula contoh cache. y
<code class="language-csharp">static void Foo<T>() where T : new() { T t = new T(); Console.WriteLine(t.ToString()); // Works fine Console.WriteLine(t.GetHashCode()); // Works fine Console.WriteLine(t.Equals(t)); // Works fine Console.WriteLine(t.GetType()); // Throws NullReferenceException }</code>sementara
, ToString()
, dan GetHashCode()
berkelakuan seperti yang diharapkan untuk jenis yang tidak dapat dibatalkan (seperti Equals()
), memanggil int?
melemparkan GetType()
. Ini kerana walaupun kaedah maya ditindih, NullReferenceException
tidak beroperasi pada nilai nullable berkotak, yang berpotensi mengakibatkan rujukan null. GetType()
<code class="language-csharp">private static void Main() { CanThisHappen<MyFunnyType>(); } public static void CanThisHappen<T>() where T : class, new() { var instance = new T(); // new() on a ref-type; should be non-null, then Debug.Assert(instance != null, "How did we break the CLR?"); }</code>Walaupun seseorang mungkin mengharapkan contoh yang tidak nol
, ini boleh dielakkan menggunakan teknik yang melibatkan kelas proksi yang kembali T
untuk panggilan null
. Ini menonjolkan interaksi kompleks antara CLR dan tingkah laku runtime kod terurus. Contoh -contoh ini menunjukkan bahawa walaupun kod yang kelihatan mudah dapat mempamerkan tingkah laku yang tidak dijangka dalam senario tertentu, menekankan pentingnya ujian menyeluruh dan memahami mekanisme asas C# dan .NET.
Atas ialah kandungan terperinci Apakah Gelagat Mengejutkan yang Boleh Anda Hadapi dengan C# dan .NET Corner Cases?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!