Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C# Polymorphie: Statische vs. Dynamische Bindung

Was ist Polymorphie?

Polymorphie ("viele Formen") ermöglicht, dass ein Interface mehrere Implementierungen hat. In C# zwei Formen:

Statische Polymorphie

1. Methodenüberladung (Overloading)

Mehrere Methoden mit gleichem Namen, aber unterschiedlicher Signatur (Anzahl/Typ der Parameter). Rückgabetyp allein reicht nicht.

public class PrintData
{
    public void Print(int i)    => Console.WriteLine($"Integer: {i}");
    public void Print(double f) => Console.WriteLine($"Float: {f}");
    public void Print(string s) => Console.WriteLine($"String: {s}");
}

// Nutzung
var p = new PrintData();
p.Print(5);        // Integer: 5
p.Print(500.263);  // Float: 500.263
p.Print("Hello");  // String: Hello

2. Operatorüberladung

Siehe nächstes Kapitel.

Dynamische Polymorphie

Abstrakte Klassen & Methoden

public abstract class Shape
{
    public abstract int Area(); // keine Implementierung
}

public class Rectangle : Shape
{
    private int Length, Width;
    public Rectangle(int l, int w) { Length = l; Width = w; }
    public override int Area() => Length * Width; // override Pflicht
}

// Nutzung
Shape shape = new Rectangle(10, 7);
Console.WriteLine($"Area: {shape.Area()}"); // 70

Virtuelle Methoden (virtual/override)

Basisklasse stellt Standardimplementierung bereit, abgeleitete Klasse kann überschreiben.

public class Shape
{
    protected int Width, Height;
    public Shape(int w = 0, int h = 0) { Width = w; Height = h; }
    public virtual int Area() // Standardimplementierung
    {
        Console.WriteLine("Parent class area");
        return 0;
    }
}

public class Rectangle : Shape
{
    public Rectangle(int w, int h) : base(w, h) { }
    public override int Area()
    {
        Console.WriteLine("Rectangle class area");
        return Width * Height;
    }
}

public class Triangle : Shape
{
    public Triangle(int w, int h) : base(w, h) { }
    public override int Area()
    {
        Console.WriteLine("Triangle class area");
        return Width * Height / 2;
    }
}

// Polymorpher Aufruf
public class Caller
{
    public void CallArea(Shape shape)
    {
        Console.WriteLine($"Area: {shape.Area()}");
    }
}

// Nutzung
var caller = new Caller();
caller.CallArea(new Rectangle(10, 7)); // Rectangle class area → 70
caller.CallArea(new Triangle(10, 5));  // Triangle class area → 25

Zusammenfassung

ArtMechanismusBindungBeispiel
StatischOverloadingCompile-TimeMehrere Print(int), Print(string)
StatischOperator OverloadingCompile-Timeoperator+
DynamischAbstract MethodsRuntimeabstract int Area()
DynamischVirtual MethodsRuntimevirtual int Area() + override

C Sprache

  1. C# Klassen & Objekte: Fundamente für robustes OOP
  2. C# Zugriffsmodifizierer verstehen: Public, Private, Protected, Internal und mehr
  3. C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
  4. C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
  5. C# Geschachtelte Klassen verstehen: Definition, Verwendung und Vererbung
  6. C# Partielle Klassen und Methoden verstehen
  7. C++ Klassentemplates meistern: Ein praktischer Leitfaden
  8. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  9. Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
  10. Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen