Mengapa Kaedah Statik Tidak Boleh Ditindih dalam C#
Dalam C#, tidak mungkin untuk mengisytiharkan kaedah statik abstrak dalam kelas abstrak. Sekatan ini berpunca daripada sifat asas kaedah statik.
Kaedah statik digunakan menggunakan nama kelas secara langsung, tanpa contoh kelas. Apabila kaedah statik dipanggil, pengkompil menyelesaikan panggilan kepada definisi dalam kelas yang mengisytiharkannya, tanpa mengira jenis sebenar objek panggilan.
Sebagai contoh, pertimbangkan kod berikut:
public abstract class A { public static void Test() {} } public class B : A { public static void Test() {} // Compiler error }
Dalam senario ini, pengkompil akan mengadu bahawa kaedah Ujian dalam kelas B tidak boleh mengatasi kaedah Ujian abstrak dalam kelas A. Ini kerana pengkompil menyelesaikan panggil ke Ujian menggunakan nama kelas A, walaupun kaedah dipanggil pada contoh B.
Sebab Sekatan
Ketidakupayaan untuk mengatasi kaedah statik dalam C# timbul daripada fakta bahawa kaedah maya dan abstrak hanya bermakna apabila digunakan pada objek. Memandangkan kaedah statik boleh diakses tanpa rujukan objek, ia tidak boleh ditindih.
Kaedah maya, sebaliknya, bergantung pada polimorfisme untuk menentukan pelaksanaan untuk memanggil berdasarkan jenis objek sebenar. Ini memerlukan kewujudan pembolehubah yang boleh memegang objek daripada jenis yang berbeza, yang tidak boleh digunakan untuk kaedah statik.
Kesimpulan
Dalam C#, kaedah statik tidak boleh ditindih kerana ia dipanggil secara langsung menggunakan nama kelas dan tidak dikaitkan dengan objek tertentu. Kaedah maya, yang membenarkan penggantian, memerlukan rujukan objek untuk menentukan pelaksanaan yang betul untuk dipanggil pada masa jalan.
Atas ialah kandungan terperinci Mengapa Kaedah Statik Tidak Boleh Ditindih dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!