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

C# Interfaces: Verträge für robuste objektorientierte Programmierung

Was ist ein Interface?

Ein Interface definiert einen Vertrag ("Was" – keine Implementierung). Es enthält nur Deklarationen von Methoden, Properties, Events, Indexern. Die implementierende Klasse liefert das "Wie".

Interface deklarieren

public interface ITransaction
{
    void ShowTransaction();      // Methode
    double Amount { get; set; }  // Property
    event EventHandler Completed; // Event
}

Interface implementieren

public class Transaction : ITransaction
{
    private string Code, Date;
    private double Amount;

    public Transaction(string code, string date, double amount)
    {
        Code = code; Date = date; Amount = amount;
    }

    public double Amount { get => Amount; set => Amount = value; } // Property

    public void ShowTransaction()
    {
        Console.WriteLine($"Transaction: {Code}, Date: {Date}, Amount: {Amount}");
    }
}

Explizite Interface-Implementierung

Wenn eine Klasse mehrere Interfaces mit gleicher Methodensignatur implementiert oder die Member "versteckt" halten will:

interface I1 { void Do(); }
interface I2 { void Do(); }

public class MyClass : I1, I2
{
    void I1.Do() { Console.WriteLine("I1.Do"); }
    void I2.Do() { Console.WriteLine("I2.Do"); }

    public void Do() { Console.WriteLine("Public Do"); }
}

// Nutzung
MyClass obj = new MyClass();
obj.Do();           // Public Do
((I1)obj).Do();     // I1.Do
((I2)obj).Do();     // I2.Do

Interface vs. Abstrakte Klasse

MerkmalInterfaceAbstrakte Klasse
MehrfachimplementierungJa (beliebig viele)Nein (nur eine Basisklasse)
ImplementierungNein (bis C# 8), ab C# 8 defaultJa (kann Code enthalten)
FelderNein (nur static const)Ja
KonstruktorNeinJa
ZugriffsmodifiziererImplicit publicBeliebig

Beispiel: Transaktionen

using System;

namespace InterfaceApplication
{
    public interface ITransaction
    {
        void ShowTransaction();
        double GetAmount();
    }

    public class Transaction : ITransaction
    {
        private string Code, Date;
        private double Amount;

        public Transaction(string c, string d, double a)
        {
            Code = c; Date = d; Amount = a;
        }

        public double GetAmount() => Amount;

        public void ShowTransaction()
        {
            Console.WriteLine($"Transaction: {Code}");
            Console.WriteLine($"Date: {Date}");
            Console.WriteLine($"Amount: {GetAmount()}");
        }
    }

    class Program
    {
        static void Main()
        {
            ITransaction t1 = new Transaction("001", "8/10/2012", 78900);
            ITransaction t2 = new Transaction("002", "9/10/2012", 451900);
            t1.ShowTransaction();
            t2.ShowTransaction();
            Console.ReadKey();
        }
    }
}

C Sprache

  1. SPICE über die Kommandozeile: Die Bedeutung des „<“-Operators
  2. C#-Interfaces meistern: Definition, Implementierung und praktische Anwendungsfälle
  3. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  4. Java Collection Interface: Kernkonzepte & essenzielle Methoden
  5. Java NavigableSet Interface meistern: Navigation, Sortierung und praktische Beispiele
  6. Java Lambda Expressions meistern: Von Grundlagen bis Stream API
  7. Zuverlässiger kabelloser Einfahrtssensor für lange Einfahrten – Einfache Raspberry Pi Integration
  8. Java Interfaces verstehen: Definitionen, Verwendung und Best Practices
  9. C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions
  10. Java 9 Private Interface Methods: Bessere Kapselung & Code-Wiederverwendung