Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C# - Polimorfisme

Kata polimorfisme berarti memiliki banyak bentuk. Dalam paradigma pemrograman berorientasi objek, polimorfisme sering dinyatakan sebagai 'satu antarmuka, banyak fungsi'.

Polimorfisme bisa statis atau dinamis. Dalam polimorfisme statis , respons terhadap suatu fungsi ditentukan pada waktu kompilasi. Dalam polimorfisme dinamis , diputuskan pada saat run-time.

Polimorfisme Statis

Mekanisme menghubungkan fungsi dengan objek selama waktu kompilasi disebut pengikatan awal. Ini juga disebut pengikatan statis. C# menyediakan dua teknik untuk mengimplementasikan polimorfisme statis. Mereka adalah

Kami membahas kelebihan operator di bab berikutnya.

Fungsi Kelebihan Beban

Anda dapat memiliki beberapa definisi untuk nama fungsi yang sama dalam lingkup yang sama. Definisi fungsi harus berbeda satu sama lain berdasarkan jenis dan/atau jumlah argumen dalam daftar argumen. Anda tidak dapat membebani deklarasi fungsi yang hanya berbeda berdasarkan tipe pengembalian.

Contoh berikut menunjukkan menggunakan fungsi print() untuk mencetak tipe data yang berbeda

Demo Langsung
using System;

namespace PolymorphismApplication {
   class Printdata {
      void print(int i) {
         Console.WriteLine("Printing int: {0}", i );
      }
      void print(double f) {
         Console.WriteLine("Printing float: {0}" , f);
      }
      void print(string s) {
         Console.WriteLine("Printing string: {0}", s);
      }
      static void Main(string[] args) {
         Printdata p = new Printdata();
         
         // Call print to print integer
         p.print(5);
         
         // Call print to print float
         p.print(500.263);
         
         // Call print to print string
         p.print("Hello C++");
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Printing int: 5
Printing float: 500.263
Printing string: Hello C++

Polimorfisme Dinamis

C# memungkinkan Anda untuk membuat kelas abstrak yang digunakan untuk menyediakan implementasi kelas parsial dari sebuah antarmuka. Implementasi selesai ketika kelas turunan mewarisi darinya. Abstrak kelas berisi metode abstrak, yang diimplementasikan oleh kelas turunan. Kelas turunan memiliki fungsionalitas yang lebih khusus.

Berikut adalah aturan tentang kelas abstrak

Program berikut mendemonstrasikan kelas abstrak

Demo Langsung
using System;

namespace PolymorphismApplication {
   abstract class Shape {
      public abstract int area();
   }
   
   class Rectangle:  Shape {
      private int length;
      private int width;
      
      public Rectangle( int a = 0, int b = 0) {
         length = a;
         width = b;
      }
      public override int area () { 
         Console.WriteLine("Rectangle class area :");
         return (width * length); 
      }
   }
   class RectangleTester {
      static void Main(string[] args) {
         Rectangle r = new Rectangle(10, 7);
         double a = r.area();
         Console.WriteLine("Area: {0}",a);
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Rectangle class area :
Area: 70

Ketika Anda memiliki fungsi yang didefinisikan di kelas yang ingin Anda implementasikan di kelas yang diwarisi, Anda menggunakan virtual fungsi. Fungsi virtual dapat diimplementasikan secara berbeda di kelas warisan yang berbeda dan panggilan ke fungsi ini akan diputuskan saat runtime.

Polimorfisme dinamis diimplementasikan oleh kelas abstrak dan fungsi virtual .

Program berikut menunjukkan ini

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

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

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

Bahasa C

  1. C# Kelas dan Objek
  2. C# Akses Pengubah
  3. C# Kata Kunci statis
  4. C# kelas abstrak dan metode
  5. C# Kelas Bersarang
  6. C# Kelas Parsial dan Metode Parsial
  7. Template Kelas C++
  8. Kelas Anonim Java
  9. Kelas Java ObjectOutputStream
  10. Java Generik