เมธอดนามธรรมไม่ได้จัดเตรียมการนำไปใช้และบังคับให้คลาสที่ได้รับมาแทนที่เมธอด มันถูกประกาศภายใต้คลาสนามธรรม วิธีนามธรรมมีเพียงคำจำกัดความของวิธีการ
เมธอดเสมือนมีการนำไปปฏิบัติ ต่างจากเมธอด Abstract และสามารถมีอยู่ในคลาสนามธรรมและไม่เป็นนามธรรม มันให้คลาสที่ได้รับพร้อมตัวเลือกในการแทนที่มัน
ฟังก์ชันเสมือน
คีย์เวิร์ดเสมือนมีประโยชน์ในการแก้ไขเมธอด คุณสมบัติ ตัวทำดัชนี หรือเหตุการณ์ เมื่อคุณมีฟังก์ชันที่กำหนดไว้ในคลาสที่คุณต้องการนำไปใช้ในคลาสที่สืบทอดมา คุณจะใช้ฟังก์ชันเสมือน ฟังก์ชันเสมือนสามารถใช้งานได้แตกต่างกันในคลาสที่สืบทอดมาที่แตกต่างกัน และการเรียกใช้ฟังก์ชันเหล่านี้จะถูกตัดสินเมื่อรันไทม์
ต่อไปนี้เป็นฟังก์ชันเสมือน −
public virtual int area() { } นี่คือตัวอย่างที่แสดงวิธีการทำงานกับฟังก์ชันเสมือน -
ตัวอย่าง
using System;
namespace PolymorphismApplication {
class Shape {
protected int width, height;
public Shape( int a = 0, int b = 0) {
width = a;
height = b;
}
public virtual int area() {
Console.WriteLine("Parent class area :");
return 0;
}
}
class Rectangle: Shape {
public Rectangle( int a = 0, int b = 0): base(a, b) {
}
public override int area () {
Console.WriteLine("Rectangle class area ");
return (width * height);
}
}
class Triangle: Shape {
public Triangle(int a = 0, int b = 0): base(a, b) {
}
public override int area() {
Console.WriteLine("Triangle class area:");
return (width * height / 2);
}
}
class Caller {
public void CallArea(Shape sh) {
int a;
a = sh.area();
Console.WriteLine("Area: {0}", a);
}
}
class Tester {
static void Main(string[] args) {
Caller c = new Caller();
Rectangle r = new Rectangle(10, 7);
Triangle t = new Triangle(10, 5);
c.CallArea(r);
c.CallArea(t);
Console.ReadKey();
}
}
} ผลลัพธ์
Rectangle class area Area: 70 Triangle class area: Area: 25
ฟังก์ชันนามธรรม
คำหลักนามธรรมใน C # ใช้สำหรับคลาสนามธรรมและฟังก์ชันนามธรรม คลาสนามธรรมใน C# ประกอบด้วยเมธอดนามธรรมและไม่ใช่นามธรรม
ต่อไปนี้เป็นตัวอย่างของฟังก์ชันนามธรรมในคลาสนามธรรมใน C# -
ตัวอย่าง
using System;
public abstract class Vehicle {
public abstract void display();
}
public class Bus : Vehicle {
public override void display() {
Console.WriteLine("Bus");
}
}
public class Car : Vehicle {
public override void display() {
Console.WriteLine("Car");
}
}
public class Motorcycle : Vehicle {
public override void display() {
Console.WriteLine("Motorcycle");
}
}
public class MyClass {
public static void Main() {
Vehicle v;
v = new Bus();
v.display();
v = new Car();
v.display();
v = new Motorcycle();
v.display();
}
} ผลลัพธ์
Bus Car Motorcycle