Poniższy kod zawiera metodę statyczną Foo()
, wywołując metodę instancji Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Kompiluje się bez błędów *, ale generuje wyjątek spinacza czasu wykonywania w czasie wykonywania. Zgodnie z oczekiwaniami usunięcie parametru dynamicznego z tych metod powoduje błąd kompilatora.
Dlaczego więc posiadanie parametru dynamicznego pozwala na kompilację kodu? ReSharper również nie pokazuje tego jako błędu.
Edytuj 1: * w programie Visual Studio 2008
Edycja 2: dodana, sealed
ponieważ jest możliwe, że podklasa może zawierać Bar(...)
metodę statyczną . Nawet wersja zapieczętowana kompiluje się, gdy nie jest możliwe wywołanie metody innej niż metoda instancji w czasie wykonywania.
dynamic
chyba że naprawdę potrzebujesz.