Kaedah Statik Maya dan Abstrak: Penjelasan Mendalam
Apabila bekerja dengan pembekal, anda mungkin menghadapi keinginan untuk kelas abstrak dengan kaedah statik abstrak. Walaupun ini mungkin kelihatan logik, terdapat isu asas yang menghalang pelaksanaannya dalam C#.
Memahami Kaedah Statik
Kaedah statik tidak instantiated; mereka boleh diakses tanpa rujukan objek. Mereka dipanggil melalui nama kelas, bukan contoh objek. Kod Bahasa Pertengahan (IL) memanggil kaedah abstrak melalui nama kelas yang mentakrifkannya, bukan kelas yang menggunakannya.
Mengapa Tiada Kaedah Statik Abstrak?
Kaedah maya hanya berguna apabila bekerja dengan pembolehubah yang boleh memuatkan pelbagai jenis objek, membolehkan anda memanggil kaedah yang betul untuk objek dalam pembolehubah semasa masa jalan. Walau bagaimanapun, kaedah statik memerlukan nama kelas, yang diketahui pada masa penyusunan. Ini bermakna kaedah yang tepat untuk membuat panggilan adalah tetap dan tidak boleh ditentukan secara dinamik, menjadikan kaedah statik maya/abstrak tidak diperlukan.
Contoh
Pertimbangkan kod berikut:
public class A { public static void Test() { // Method body } } public class B : A { // Call A.Test() by default }
Apabila anda memanggil B.Test() daripada kaedah Utama, kod IL sebenar dikompil untuk memanggil A.Test() kerana ia adalah kelas yang menentukan. Panggilan kekal bukan maya kerana ia sentiasa dilaksanakan terhadap kaedah yang sama, tanpa mengira objek yang dirujuk.
Kesimpulan
Disebabkan sifat kaedah statik dalam C#, di mana ia bukan maya dan dipanggil melalui nama kelas, konsep kaedah statik maya/abstrak tidak boleh digunakan. Kaedah ini tidak disokong dalam rangka kerja .NET.
Atas ialah kandungan terperinci Mengapa C# Tidak Boleh Mempunyai Kaedah Statik Abstrak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!