Kaedah Statik Maya dan Abstrak dalam C#
Apabila bekerja dengan pembekal, persoalan sama ada kelas abstrak boleh mempunyai kaedah statik abstrak timbul. Memahami konsep ini memerlukan penjelasan yang jelas.
Mengapa Kaedah Statik Tidak Dimulakan
Kaedah statik tidak dibuat secara langsung; ia boleh diakses tanpa memerlukan rujukan objek. Ia dipanggil melalui nama kelas, bukan contoh objek.
Implikasi Panggilan Statik Bukan Maya
Dalam kod Bahasa Perantaraan (IL), panggilan kaedah statik dibuat menggunakan nama kelas yang menentukan kaedah, bukan nama kelas objek yang merujuk. Contohnya:
public class A { public static void Test() { } } public class B : A { } class Program { static void Main(string[] args) { B.Test(); } }
Kod IL untuk kaedah Utama ialah:
.entrypoint .maxstack 8 L0000: nop L0001: call void ConsoleApplication1.A::Test() L0006: nop L0007: ret
Perhatikan bahawa panggilan dibuat ke A.Test, bukan B.Test, walaupun B. Ujian digunakan dalam kod C#.
Had Maya dengan Statik Kaedah
Kaedah maya, termasuk kaedah abstrak, berguna apabila berurusan dengan pembolehubah yang boleh merujuk kepada jenis objek berbeza semasa masa jalan. Untuk kaedah statik, kaedah sasaran diketahui pada masa penyusunan kerana ia diakses melalui nama kelas. Ini menghapuskan keperluan untuk virtualisasi.
Oleh itu, kaedah statik maya/abstrak tidak disokong dalam C#. Ini kerana panggilan kaedah statik bukan maya dan kaedah sasaran ditentukan pada masa penyusunan, menjadikan virtualisasi tidak diperlukan.
Atas ialah kandungan terperinci Bolehkah Kelas Abstrak Mempunyai Kaedah Statik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!