C # -Schnittstellenfrage

8

Gibt es Kosten bei der Übergabe eines Objekts an eine Funktion, die eine bestimmte Schnittstelle implementiert, bei der die Funktion nur diese Schnittstelle akzeptiert? Wie:

%Vor%

und ich passiere:

%Vor%

alle implementieren IEnumerable. Aber wenn Sie eine dieser Methoden an die Change-Methode übergeben, werden sie an IEnumerable übergeben, sodass es Kosten für die Umwandlung gibt, aber auch das Problem, dass sie ihre einzigartigen Methoden verlieren usw.?

    
Joan Venge 27.02.2009, 17:25
quelle

2 Antworten

14

Nein, es ist kein Cast involviert seit List<T> IS-A IEnumerable<T> . Dies verwendet Polymorphie, die kein Casting erfordert.

Bearbeiten: Hier ist ein Beispiel:

%Vor%

Die IL für Main ist:

%Vor%

Und wie Sie sehen können, ist kein Casting beteiligt. Die Instanz von List<T> wird auf den Stapel geschoben und die foo wird unmittelbar danach aufgerufen.

    
Andrew Hare 27.02.2009, 17:27
quelle
0

Ich glaube nicht, dass es Kosten gibt. Da die Typen IEnumerable bereits implementieren, sollte das Objekt sofort verwendet werden können (beachten Sie, dass dies meistens eine Vermutung ist; ich habe keine Ahnung, wie die Vtables der CLR wirklich hinter den Kulissen funktionieren).

Wenn es Kosten gibt, wird es so erstaunlich klein sein, dass, wenn es einen Unterschied macht, Sie wahrscheinlich nicht mit der CLR anfangen sollten.

    
overslacked 27.02.2009 17:30
quelle