Dlaczego kompilator C# nie mówi mi, że ten fragment kodu jest nieprawidłowy?Dlaczego kompilator C# nie sprawdza "statyczności" metody w miejscu wywołania z argumentem dynamicznym?
class Program
{
static void Main(string[] args)
{
dynamic d = 1;
MyMethod(d);
}
public void MyMethod(int i)
{
Console.WriteLine("int");
}
}
Wezwanie do MyMethod
nie w czasie wykonywania, ponieważ staram się wywołać non-statycznej metody z metody statycznej. To bardzo rozsądne, ale dlaczego kompilator nie uważa tego za błąd podczas kompilacji?
Następujące nie skompilować
class Program
{
static void Main(string[] args)
{
dynamic d = 1;
MyMethod(d);
}
}
tak pomimo dynamicznego wysyłki, kompilator musi sprawdzić, MyMethod
istnieje. Dlaczego nie sprawdza "statyczności"?
Ale jeśli nie istnieje metoda instancji o nazwie "MyMethod", to * powinna * być w stanie wygenerować błąd kompilacji ???? Wygląda na to, że kompilator jest wystarczająco inteligentny, aby zobaczyć, czy MyMethod "w ogóle nie istnieje ... więc twoja odpowiedź mnie jeszcze nie przekonała ... może mógłbyś rozwinąć nieco więcej? :-) –
Nie rozumiem dlaczego (czas pracy) Rozdzielczość przeciążenia bierze pod uwagę metody instancji, gdy strona wywołania jest w statycznej metodzie – CodesInChaos
Ponieważ stara się wygenerować dobrą diagnostykę Czy programista zapomniał dodać przeciążenie? Czy może zapomniał statycznego słowa kluczowego? –