(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Verwenden von Varianz in Delegaten (C# und Visual Basic)

Wenn Sie einem Delegaten eine Methode zuweisen, bieten Kovarianz und Kontravarianz Flexibilität beim Abgleich eines Delegattyps mit einer Methodensignatur. Kovarianz unterstützt eine Methode mit einem stärker abgeleiteten Rückgabetyp, als im Delegaten definiert wurde. Kontravarianz unterstützt eine Methode mit Parametertypen, die weniger stark abgeleitet sind als die im Delegattyp.

ms173174.collapse_all(de-de,VS.120).gifBeschreibung

Anhand dieses Beispiels wird veranschaulicht, wie Delegaten mit Methoden verwendet werden können, deren Rückgabetypen von dem Rückgabetyp in der Delegatsignatur abgeleitet wird. Der von DogsHandler zurückgegebene Datentyp entspricht dem Typ Dogs, der sich von dem im Delegaten definierten Mammals-Typ ableitet.

ms173174.collapse_all(de-de,VS.120).gifCode


class Mammals{}
class Dogs : Mammals{}

class Program
{
    // Define the delegate.
    public delegate Mammals HandlerMethod();

    public static Mammals MammalsHandler()
    {
        return null;
    }

    public static Dogs DogsHandler()
    {
        return null;
    }

    static void Test()
    {
        HandlerMethod handlerMammals = MammalsHandler;

        // Covariance enables this assignment.
        HandlerMethod handlerDogs = DogsHandler;
    }
}


ms173174.collapse_all(de-de,VS.120).gifBeschreibung

Anhand dieses Beispiels wird veranschaulicht, wie Delegaten mit Methoden verwendet werden können, deren Parametertyp den Basistypen des Parametertyps in der Delegatsignatur entspricht. Mit Kontravarianz können Sie einen Ereignishandler anstelle von separaten Handlern verwenden. Sie können z. B. einen Ereignishandler erstellen, der einen EventArgs-Eingabeparameter akzeptiert, und ihn mit einem Button.MouseClick-Ereignis verwenden, das einen MouseEventArgs-Typ als Parameter sendet, oder auch mit einem TextBox.KeyDown-Ereignis, das einen KeyEventArgs-Parameter sendet.

ms173174.collapse_all(de-de,VS.120).gifCode


// Event hander that accepts a parameter of the EventArgs type.
private void MultiHandler(object sender, System.EventArgs e)
{
    label1.Text = System.DateTime.Now.ToString();
}

public Form1()
{
    InitializeComponent();

    // You can use a method that has an EventArgs parameter,
    // although the event expects the KeyEventArgs parameter.
    this.button1.KeyDown += this.MultiHandler;

    // You can use the same method 
    // for an event that expects the MouseEventArgs parameter.
    this.button1.MouseClick += this.MultiHandler;

}


Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft