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.?
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:
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.
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.
Tags und Links .net c# performance interface ienumerable