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

Polimorfisme C#: Penjelasan Binding Statis vs Dinamis

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

Polimorfisme dapat statis atau dinamis. Dalam polimorfisme statis, respons terhadap fungsi ditentukan pada waktu kompilasi. Dalam polimorfisme dinamis, ditentukan pada waktu eksekusi.

Polimorfisme Statis

Mekanisme menghubungkan fungsi dengan objek selama waktu kompilasi disebut early binding. Ini juga disebut static binding. C# menyediakan dua teknik untuk mengimplementasikan polimorfisme statis. Mereka adalah:

Kita membahas operator overloading di bab berikutnya.

Function Overloading

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

Contoh berikut menunjukkan penggunaan fungsi print() untuk mencetak berbagai tipe data:

Live Demo
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, hasilnya adalah:

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

Polimorfisme Dinamis

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

Berikut adalah aturan tentang kelas abstrak:

Program berikut menunjukkan kelas abstrak:

Live Demo
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, hasilnya adalah:

Rectangle class area : Area: 70

Saat Anda memiliki fungsi yang didefinisikan dalam kelas yang ingin Anda implemenasikan dalam kelas yang mewarisi, Anda menggunakan fungsi virtual. Fungsi virtual dapat diimplementasikan secara berbeda dalam kelas yang mewarisi berbeda dan panggilan ke fungsi-fungsi ini akan ditentukan pada waktu eksekusi.

Polimorfisme dinamis diimplementasikan oleh kelas abstrak dan fungsi virtual.

Program berikut menunjukkan hal ini:

Live Demo
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, hasilnya adalah:

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

Bahasa C

  1. Kelas dan Objek C#: Fondasi untuk OOP yang Kuat
  2. Memahami Modifier Akses C#: Public, Private, Protected, Internal, dan Lainnya
  3. Kata Kunci Static C#: Menguasai Variabel, Metode, dan Kelas Statis
  4. Menguasai Kelas dan Metode Abstrak C#: Panduan Praktis
  5. Memahami Kelas Bersarang C#: Definisi, Penggunaan, dan Warisan
  6. Memahami Kelas dan Metode Parsial C#
  7. Menguasai Template Kelas C++: Panduan Praktis
  8. Menguasai Kelas Dalam Anonim Java: Definisi, Sintaks, dan Contoh Praktis
  9. Menguasai Java ObjectOutputStream: Serialisasi, Metode, dan Contoh Praktis
  10. Menguasai Java Generics – Membangun Kode yang Dapat Digunakan Kembali dan Aman Tipe