Computer >> Máy Tính >  >> Lập trình >> C#

Sự khác biệt giữa các hàm ảo và trừu tượng trong C # là gì?

Các phương thức trừu tượng không cung cấp một triển khai và chúng buộc các lớp dẫn xuất ghi đè phương thức. Nó được khai báo dưới lớp trừu tượng. Một phương thức trừu tượng chỉ có định nghĩa phương thức

Các phương thức ảo có một triển khai, không giống như phương thức Trừu tượng và nó có thể tồn tại trong lớp trừu tượng và không trừu tượng. Nó cung cấp các lớp dẫn xuất với tùy chọn ghi đè nó.

Chức năng ảo

Từ khóa ảo hữu ích trong việc sửa đổi một phương thức, thuộc tính, trình chỉ mục hoặc sự kiện. Khi bạn có một hàm được xác định trong một lớp mà bạn muốn được triển khai trong (các) lớp kế thừa, bạn sử dụng các hàm ảo. Các hàm ảo có thể được triển khai khác nhau trong các lớp kế thừa khác nhau và lệnh gọi các hàm này sẽ được quyết định trong thời gian chạy.

Sau đây là một hàm ảo -

public virtual int area() { }

Đây là một ví dụ cho thấy cách làm việc với các hàm ảo -

Ví dụ

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();
      }
   }
}

Đầu ra

Rectangle class area
Area: 70
Triangle class area:
Area: 25

Các hàm trừu tượng

Từ khóa trừu tượng trong C # được sử dụng cho các lớp trừu tượng và các hàm trừu tượng. Một lớp trừu tượng trong C # bao gồm các phương thức trừu tượng và không trừu tượng.

Sau đây là một ví dụ về các hàm trừu tượng trong một lớp trừu tượng trong C # -

Ví dụ

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();
   }
}

Đầu ra

Bus
Car
Motorcycle