Informationen zur Verwendung systemdefinierter Schnittstellen

Abgeschlossen

Die Integration systemdefinierter Schnittstellen in C#-Anwendungen ist in vielen praktischen Codierungsszenarien nützlich. Mit systemdefinierten Schnittstellen in C# können Sie vordefinierte Funktionen anwenden, sodass Ihre Anwendungen konsistent und stabil sind.

Allgemeine Schnittstellen, die in Methoden verwendet werden

In C#-Methoden innerhalb von .NET Framework werden häufig mehrere gängige Schnittstellen verwendet. Diese Schnittstellen stellen Standardfunktionen bereit, die von verschiedenen Klassen implementiert werden.

  • IComparable: Wird zum Vergleichen von Objekten verwendet.
  • IEnumerable: Wird zum Durchlaufen von Sammlungen verwendet.
  • IDisposable: Wird zum Freigeben nicht verwalteter Ressourcen verwendet.
  • IEquatable: Wird zum Definieren von Gleichheitsvergleichen verwendet.

Implementieren von vom System definierten Schnittstellen

Um ein systemdefiniertes Schnittstellenmememm zu implementieren, muss das entsprechende Element der implementierenden Klasse öffentlich sein und nicht staticdenselben Namen und dieselbe Signatur wie das Schnittstellenelement aufweisen. Eine Klasse oder Struktur, die eine Schnittstelle implementiert, muss eine Implementierung für alle deklarierten Member ohne eine Standardimplementierung bereitstellen, die von der Schnittstelle bereitgestellt wird.

Systemdefinierte Schnittstellen in .NET verwenden häufig einen Platzhalter T , um einen beliebigen Typ darzustellen. Die Schnittstelle IEquatable wird im .NET Framework wie folgt definiert:

public interface IEquatable
{
    bool Equals(T other);
}

Wenn Sie diese Schnittstelle in einer Klasse implementieren, ersetzen Sie T durch den Typ der Klasse.

Die folgende Car Klasse implementiert beispielsweise die IEquatable Schnittstelle:

public class Car : IEquatable
{
    public string Make { get; set; }
    public string Model { get; set; }

    public bool Equals(Car other)
    {
        if (other == null) return false;
        return this.Make == other.Make && this.Model == other.Model;
    }
}

In diesem Beispiel ersetzt CarT in IEquatable, sodass es IEquatable wird. Die Car Klasse stellt eine eigene Implementierung der Equals Methode bereit, die überprüft, ob die Make Eigenschaften Model und Eigenschaften des aktuellen Car Objekts den Eigenschaften des otherCar Objekts entsprechen.

Eigenschaften und Indexer einer Klasse können zusätzliche Accessoren für eine Eigenschaft oder einen Indexer definieren, die in einer Schnittstelle definiert sind. Beispielsweise kann eine Schnittstelle eine Eigenschaft deklarieren, die über einen get Accessor verfügt. Die Klasse, die die Schnittstelle implementiert, kann dieselbe Eigenschaft sowohl mit einem get- als auch einem set-Accessor deklarieren. Ein Beispiel:

public interface IExampleInterface
{
    string Name { get; }
}

public class ExampleClass : IExampleInterface
{
    public string Name { get; set; }
}

In diesem Beispiel deklariert IExampleInterface eine Eigenschaft Name mit einer get-Zugriffsmethode. ExampleClass implementiert die Schnittstelle und deklariert dieselbe Eigenschaft sowohl mit einem get- als auch einem set-Accessor.

Verwendung gängiger systemdefinierter Schnittstellen

Allgemeine systemdefinierte Schnittstellen wie IEnumerable, IDisposableund IComparable werden häufig in .NET-Anwendungen verwendet. Diese Schnittstellen stellen Standardmethoden bereit, die implementiert werden können, um ein einheitliches Verhalten für verschiedene Typen sicherzustellen.

IEnumerable

Die IEnumerable Schnittstelle wird verwendet, um eine Auflistung zu definieren, die aufgezählt werden kann. Sie enthält eine einzelne Methode, GetEnumerator, die einen Enumerator zurückgibt, der die Auflistung durchläuft.

public class MyCollection : IEnumerable
{
    private int[] _items = { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < _items.Length; i++)
        {
            yield return _items[i];
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

IDisposable

Die IDisposable Schnittstelle wird verwendet, um nicht verwaltete Ressourcen freizugeben. Nicht verwaltete Ressourcen sind Ressourcen, die nicht mit der .NET-Laufzeit behandelt werden, z. B. Dateihandles, Netzwerkverbindungen usw. Es ist wichtig, diese Ressourcen nach der Verwendung freizugeben, um Speicherverluste und andere Probleme zu verhindern. Sie enthält eine einzelne Methode, Dispose, die aufgerufen wird, um Ressourcen freizugeben.

public class ResourceHolder : IDisposable
{
    private bool _disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // Prevents the garbage collector from calling the finalizer if Dispose has already been called.
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // Free managed resources
            }
            // Free unmanaged resources
            _disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}

IComparable

Die IComparable Schnittstelle wird verwendet, um eine Methode zum Vergleichen von Instanzen einer Klasse zu definieren. Sie enthält eine einzelne Methode, CompareTodie die aktuelle Instanz mit einem anderen Objekt desselben Typs vergleicht.

public class Person : IComparable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        if (other == null) return 1; // If 'other' is null, this instance is considered greater
        return this.Age.CompareTo(other.Age); // Returns negative value if  precedes 'other', 0 if same position, or postive value if follows 'other'.
    }
}

In diesem Beispiel, wenn other null ist, wird "1" zurückgegeben, was angibt, dass die aktuelle Instanz als größer als ein Nullverweis betrachtet wird.

Systemdefinierte Schnittstellen in C# spielen eine entscheidende Rolle bei der Erstellung effizienter, stabiler und konsistenter Anwendungen. Sie bieten Standardmethoden, die über verschiedene Typen hinweg implementiert werden können, um die Einheitlicheität und Vorhersagbarkeit im Verhalten sicherzustellen. Indem Sie diese Schnittstellen verstehen und effektiv implementieren, können Sie vordefinierte Funktionen verwenden und die Menge an sich wiederholendem Code reduzieren, wodurch Ihre Anwendungen besser verwaltet und robuster werden.