Der folgende Code hat eine statische Methode Foo()
, die eine Instanzmethode aufruft Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Es wird ohne Fehler kompiliert *, generiert jedoch zur Laufzeit eine Laufzeitbinder-Ausnahme. Das Entfernen des dynamischen Parameters zu diesen Methoden führt erwartungsgemäß zu einem Compilerfehler.
Warum kann der Code mit einem dynamischen Parameter kompiliert werden? ReSharper zeigt es auch nicht als Fehler an.
Bearbeiten Sie 1: * in Visual Studio 2008
Bearbeiten 2: hinzugefügt, sealed
da es möglich ist, dass eine Unterklasse eine statische Bar(...)
Methode enthält. Selbst die versiegelte Version wird kompiliert, wenn es nicht möglich ist, dass zur Laufzeit eine andere Methode als die Instanzmethode aufgerufen wird.
dynamic
sei denn, Sie müssen es wirklich.