Apakah kata kunci maya? Sebelum melompat terus ke dalam perspektif C#, adalah penting untuk memahami atau menyemak semula konsep pewarisan, overriding dan kata kunci maya dalam dunia pengaturcaraan berorientasikan objek.
Penggantian Kaedah ialah konsep OOP yang disatukan rapat dengan Warisan. Apabila kaedah kelas kanak-kanak mengatasi kaedah kelas induk dengan nama, parameter dan jenis pulangan yang sama, ia dipanggil sebagai kaedah mengatasi. Kata kunci maya ialah petunjuk kepada pengkompil bahawa kaedah mungkin ditindih dalam kelas terbitan.
Datang kepada perspektif C#, kata kunci maya digunakan untuk mengubah suai pengisytiharan mana-mana harta, kaedah atau peristiwa untuk membenarkan penetapan dalam kelas terbitan. Secara ringkas, kata kunci maya melaksanakan konsep mengatasi kaedah dalam C#.
Sintaks
Sebarang sifat, kaedah atau peristiwa boleh ditindih dengan menambahkan kata kunci maya dalam kelas asas dan mengatasi kata kunci dalam kelas terbitan.
Tambah kata kunci maya dalam perisytiharan kelas asas:
public class Base { public virtual int abc { get; set; } // this property can be overridden public virtual void Xyz() { } // this method can be overridden }
Tambah kata kunci ganti dalam pengisytiharan kelas asas:
public class Derived : Base { public override int abc { get; set; } // this overrides the base class property public override void Xyz() { } // this overrides the base class method }
Perbezaan asas antara beban lampau dan overriding ialah mekanisme masa kompilasi, manakala mekanisme masa kompilasi digunakan pada masa tayangan. Kata kunci maya mula bertindak pada masa jalan, sekali gus melaksanakan konsep mengatasi kaedah.
Apabila mana-mana kaedah atau harta maya digunakan atau diakses, pengkompil menyemak ahli mengatasi kaedah atau harta tersebut. Jika satu dijumpai, ia dipanggil. Jika tiada yang ditemui, kaedah atau sifat asal akan digunakan.
Persoalan yang sangat baik di sini timbul – apakah yang berlaku dalam kes pewarisan berbilang peringkat? Nah, jika mana-mana ahli kelas diganti dalam lebih daripada satu peringkat, ahli ganti terdalam akan dipanggil (yang dalam kelas terbitan paling banyak).
Contoh Kata Kunci Maya berikut dalam C# disebut di bawah
Mari kita ambil contoh untuk memahami cara kerja kata kunci maya apabila kelas anak tunggal mewarisi kelas induk iaitu tiada warisan berbilang peringkat.
Kod:
using System; public class Polynomial { public virtual double len { get; set; } public virtual double wid { get; set; } public virtual double Area() { return len * wid; } } public class Rectangle: Polynomial { } public class Square : Polynomial { public override double len { get; set; } public override double Area() { return len * len; } } public class Circle : Polynomial { public double radius { get; set; } public override double Area() { return Math.PI * radius * radius; } } public class Triangle : Polynomial { public override double Area() { return 0.5 * len * wid; } } public class Program { public static void Main() { var rect = new Rectangle(); rect.len = 5; rect.wid = 10; Console.WriteLine("Area of Rectangle = " + rect.Area()); var sq = new Square(); sq.len = 15; Console.WriteLine("Area of Square = " + sq.Area()); var cir = new Circle(); cir.radius = 10; Console.WriteLine("Area of Circle = " + cir.Area()); var tri = new Triangle(); tri.len = 5; tri.wid = 10; Console.WriteLine("Area of Triangle = " + tri.Area()); } }
Output:
Dalam polinomial kelas asas, kami telah mengisytiharkan dua sifat dan satu kaedah sebagai maya. Ini kini boleh ditindih dalam kelas kanak-kanak. Kini kami mencipta pelbagai kelas kanak-kanak pelbagai bentuk yang mewarisi kelas Polinomial.
Dalam kelas Rectangle, kita tidak perlu mengatasi sebarang sifat atau kaedah. Pelaksanaan kelas asas akan berfungsi sebagaimana adanya untuk kelas Rectangle.
Dalam kelas Square, kami tidak mempunyai sifat lebar. Jadi kami mengatasi sifat panjang dan kaedah Luas untuk mengembalikan kuasa dua panjang.
Dalam kelas Bulatan, kami tidak mempunyai panjang atau lebar. Jadi, kami mengisytiharkan sifat jejari khusus kelas baharu dan mengatasi kaedah Kawasan dengan sewajarnya.
Dalam kelas Segitiga, kami hanya mengatasi kaedah Kawasan dan sifat diwarisi daripada Polinomial kelas asas.
Apabila kami mencipta objek kelas terbitan, pengkompil menemui kata kunci maya semasa pembinaan kelas asas dan dengan itu mencari ahli yang diganti. Ahli yang diganti kemudiannya dipanggil dengan sewajarnya.
Mari kita ubah suai contoh di atas untuk memasukkan warisan berbilang peringkat.
Kod:
using System; public class Polynomial { public virtual double len { get; set; } public virtual double wid { get; set; } public virtual double Area() { return 0; } } public class Rectangle : Polynomial { public override double Area() { return len * wid; } } public class Square : Rectangle { public override double len { get; set; } public override double Area() { return len * len; } } public class Program { public static void Main() { var rect = new Rectangle(); rect.len = 5; rect.wid = 10; Console.WriteLine("Area of Rectangle = " + rect.Area()); var sq = new Square(); sq.len = 15; Console.WriteLine("Area of Square = " + sq.Area()); } }
Output:
Ahli maya mempunyai pengisytiharan dan takrifan dalam kedua-dua kelas asas dan kelas terbitan. Ahli maya berfaedah apabila beberapa fungsi tambahan diperlukan dalam kelas terbitan. Ia berfungsi sebagai alat tambah.
Dalam artikel ini, kami memahami konsep maya dalam C#. Kami melihat cara C# melaksanakan kata kunci maya semasa masa jalan dan melihat contoh.
Ahli maya ialah konsep pengaturcaraan berorientasikan objek yang hebat. Walau bagaimanapun, untuk mendapatkan pengetahuan yang mendalam, adalah sangat disyorkan untuk mempelajari tentang kata kunci abstrak, antara muka dan kata kunci baharu. Ini akan sangat membantu dalam memahami perbezaan antara mereka semua. Ini membantu dalam menyedari bila hendak menggunakan dan bila tidak menggunakan maya.
Atas ialah kandungan terperinci Kata Kunci Maya dalam C# . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!