Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# Polymorfisme: Statische vs Dynamische Binding Uitgelegd

Polymorfisme betekent 'vele vormen'. In OOP: 'één interface, meerdere functies'.

Polymorfisme kan statisch (compile-time binding, vroege binding) of dynamisch (runtime binding, late binding) zijn.

Statisch Polymorfisme

C# biedt twee technieken:

  • Functie-overloading
  • Operator-overloading

Functie-overloading

Meerdere definities voor dezelfde functienaam in dezelfde scope. Verschillend in typen/aantal parameters. Niet alleen in retourtype.

using System;

namespace PolymorfismeApplicatie {
    class PrintData {
        void Print(int i) { Console.WriteLine("Print int: {0}", i); }
        void Print(double f) { Console.WriteLine("Print float: {0}", f); }
        void Print(string s) { Console.WriteLine("Print string: {0}", s); }
        static void Main(string[] args) {
            PrintData p = new PrintData();
            p.Print(5);
            p.Print(500.263);
            p.Print("Hello C++");
            Console.ReadKey();
        }
    }
}

Uitvoer:

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

Dynamisch Polymorfisme

C# stelt abstracte klassen toe die gedeeltelijke implementatie bieden. Afgeleide klassen voltooien de implementatie. Abstracte klassen bevatten abstracte methodes.

Regels:

  • Geen instantie van abstracte klasse.
  • Abstracte methode alleen in abstracte klasse.
  • sealed klasse kan niet geërfd worden; abstracte klasse mag niet sealed zijn.

Voorbeeld: Abstracte Klasse

using System;

namespace PolymorfismeApplicatie {
    abstract class Vorm {
        public abstract int Oppervlakte();
    }
    class Rechthoek : Vorm {
        private int lengte, breedte;
        public Rechthoek(int a = 0, int b = 0) { lengte = a; breedte = b; }
        public override int Oppervlakte() {
            Console.WriteLine("Rechthoek klasse oppervlakte:");
            return breedte * lengte;
        }
    }
    class RechthoekTester {
        static void Main(string[] args) {
            Rechthoek r = new Rechthoek(10, 7);
            double a = r.Oppervlakte();
            Console.WriteLine("Oppervlakte: {0}", a);
            Console.ReadKey();
        }
    }
}

Uitvoer: Rechthoek klasse oppervlakte: Oppervlakte: 70

Met virtual functies kan een basisklasse een implementatie geven die afgeleide klassen kunnen overschrijven. De aanroep wordt runtime bepaald.

Voorbeeld: Virtual Functies

using System;

namespace PolymorfismeApplicatie {
    class Vorm {
        protected int breedte, hoogte;
        public Vorm(int a = 0, int b = 0) { breedte = a; hoogte = b; }
        public virtual int Oppervlakte() {
            Console.WriteLine("Basisklasse oppervlakte:");
            return 0;
        }
    }
    class Rechthoek : Vorm {
        public Rechthoek(int a = 0, int b = 0) : base(a, b) { }
        public override int Oppervlakte() {
            Console.WriteLine("Rechthoek klasse oppervlakte:");
            return breedte * hoogte;
        }
    }
    class Driehoek : Vorm {
        public Driehoek(int a = 0, int b = 0) : base(a, b) { }
        public override int Oppervlakte() {
            Console.WriteLine("Driehoek klasse oppervlakte:");
            return breedte * hoogte / 2;
        }
    }
    class Aproeper {
        public void RoepOppervlakteAan(Vorm v) {
            int a = v.Oppervlakte();
            Console.WriteLine("Oppervlakte: {0}", a);
        }
    }
    class Tester {
        static void Main(string[] args) {
            Aproeper a = new Aproeper();
            Rechthoek r = new Rechthoek(10, 7);
            Driehoek d = new Driehoek(10, 5);
            a.RoepOppervlakteAan(r);
            a.RoepOppervlakteAan(d);
            Console.ReadKey();
        }
    }
}

Uitvoer:

Rechthoek klasse oppervlakte: Oppervlakte: 70
Driehoek klasse oppervlakte: Oppervlakte: 25

C Taal

  1. C# Classes & Objects: Fundamenten voor Robuuste OOP
  2. C# Access Modifiers: Public, Private, Protected, Internal en Meer
  3. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  4. C# Abstract Classes & Methods: Een Praktische Gids
  5. C# Geneste Classes: Definitie, Gebruik en Inheritance
  6. C# Partial Classes en Methods: Een Praktische Gids
  7. C++ Class Templates Beheersen: Een Praktische Gids
  8. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  9. Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
  10. Java Generics: Herbruikbare, type-veilige code bouwen
  11. Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen