Rumah > pembangunan bahagian belakang > C++ > Casting vs 'As' Kata kunci dalam C#: Bilakah saya harus menggunakan yang mana?

Casting vs 'As' Kata kunci dalam C#: Bilakah saya harus menggunakan yang mana?

DDD
Lepaskan: 2025-02-01 09:32:10
asal
129 orang telah melayarinya

Casting vs. 'as' Keyword in C#: When Should I Use Which?

c# untuk penukaran wajib dan "sebagai" perbandingan kata kunci: Bilakah ia akan digunakan?

Apabila memproses antara muka, pemaju sering menggunakan penukaran mandatori atau penukaran jenis objek untuk mengendalikan objek. Walau bagaimanapun, terdapat dua kaedah yang berbeza untuk melakukan penukaran ini: penukaran paksa dan menggunakan kata kunci "sebagai". Adakah terdapat perbezaan antara kedua -dua kaedah ini? Jika ya, bagaimanakah mereka boleh mempengaruhi pelaksanaan dan prestasi program?

memahami penukaran mandatori

Penukaran mandatori melibatkan jenis sasaran sebelum meletakkan sasaran sebelum rujukan objek, dalam kurungan, objek itu secara eksplisit ditukar dari satu jenis ke yang lain. Contohnya: Penyusun penunjuk penukaran wajib segera melaksanakan penukaran jenis, jika penukaran tidak sah, ia akan menyebabkan keabnormalan.

meneroka "sebagai" kata kunci

<code class="language-csharp">IMyInterface _MyObj = new MyClass();
MyClass _myCls1 = (MyClass)_MyObj;</code>
Salin selepas log masuk

"sebagai" kata kunci melakukan jenis bukan -invasive. Walau bagaimanapun, jika penukaran berjaya, "sebagai" akan mengembalikan objek penukaran. Berbanding dengan penukaran mandatori, "sebagai" menyediakan kaedah alternatif. Sebaliknya, kembali rujukan null.

perbandingan kos

Pada masa lalu, terdapat perbezaan dalam perbezaan prestasi antara penukaran dan penggunaan kata kunci "sebagai". Operasi penukaran paksa lebih cepat kerana ia hanya melibatkan satu penukaran jenis satu. Walau bagaimanapun, dengan kemajuan pengkompil JIT moden, kecekapan kata kunci "sebagai" telah setinggi penukaran mandatori. Kedua -dua teknologi dapat dengan cepat melaksanakan penukaran jenis, jadi mereka boleh mengabaikan prestasi dari segi prestasi.

<code class="language-csharp">IMyInterface _MyObj = new MyClass();
MyClass _myCls2 = _MyObj as MyClass;
// 如果转换不成功,_myCls2 将为 null</code>
Salin selepas log masuk
Pilih kaedah terbaik

Walaupun prestasi tidak lagi menjadi faktor penentu, aspek lain akan mempengaruhi pilihan antara penukaran mandatori dan "sebagai":

Penukaran Keselamatan:

Apabila memproses pembolehubah, disyorkan untuk menggunakan "sebagai" kerana jenis pembolehubah boleh berubah antara ujian dan penukaran. Ini mengurangkan risiko yang tidak normal yang disebabkan oleh penukaran tidak sah. Pemisahan titik berikut:

"Sebagai" Kata kunci membenarkan langkah -langkah ujian dan penukaran untuk dipisahkan. Ini meningkatkan kebolehbacaan kod dan mengurangkan kemungkinan kesilapan kecil.

    Amalan terbaik moden
  • Dalam C# 7 dan versi yang lebih tinggi, pemadanan corak telah menggantikan kata kunci "sebagai". Mekanisme ini menghapuskan permintaan untuk ujian jenis eksplisit, dengan itu menghasilkan kod yang lebih ringkas dan deklaratif.
  • Kesimpulan
"sebagai" kata kunci dan penukaran mandatori menyediakan kaedah yang berbeza untuk melakukan penukaran jenis dalam CLR. Walaupun penukaran mandatori menyediakan penukaran jenis langsung dan cekap, "sebagai" dapat mencapai penukaran yang lebih selamat dengan mengembalikan null dan bukannya keabnormalan. Penyusun JIT moden telah meminimumkan perbezaan prestasi antara teknologi ini, jadi pilihan yang sesuai boleh dibuat mengikut struktur keselamatan dan kod. Secara umumnya, apabila memproses pembolehubah, dan untuk memisahkan ujian dan penukaran jenis untuk meningkatkan penyelenggaraan kod, disarankan untuk digunakan "sebagai".

Atas ialah kandungan terperinci Casting vs 'As' Kata kunci dalam C#: Bilakah saya harus menggunakan yang mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan