Ich spiele mit Delegierten herum, aber ich verstehe offensichtlich nicht etwas Grundlegendes."Objekt stimmt nicht mit Zieltyp überein" auf Basis Delegiertenbeispiel
class Test
{
delegate bool Foo();
public void Run()
{
Delegate foo = new Foo((delegate() { return true; }));
bool result = (bool)foo.Method.Invoke(foo, null);
}
}
Test test = new Test();
test.Run();
Im obigen Beispiel begegne ich eine Ausnahme:
Ich habe folgendes bekam. „Object nicht Zielart entsprechen“
Folgende Werke in Ordnung, aber:
class Test
{
delegate bool Foo();
public void Run()
{
Foo foo = new Foo((delegate() { return true; }));
bool result = foo.Invoke();
}
}
Test test = new Test();
test.Run();
Was mit meiner ersten Implementierung falsch ist? Sollte ich nicht fo's Methode als foo ohne Parameter aufrufen? Dies würde dem letzteren Code entsprechen.
Danke. Dieser Beispielcode wird aus einer viel größeren Codebasis extrahiert, weshalb der Code selbst seltsam erscheint. Versuchen zu verstehen, warum eine Ausnahme ausgelöst wird, müssen aber zuerst die Mechanik der Delegierten lernen. –
@SeanAnderson Delegierte sind sehr einfach - sie sind nur das Ziel und die Methode, die aufgerufen werden soll. Sie sind wie eine Schnittstelle mit einer einzigen Methode :) Es sei denn, Sie tun Reflexion Mumbo-Jumbo, Sie interessieren sich auch nicht - nur "Invoke" (oder besser, '(...)'), und Sie Mir geht es gut. Wenn jemand 'Delegate.Method.Invoke' anstelle von' Delegate.Invoke' verwendet, finde sie und frage nach dem Grund. Bringen Sie einen Baseballschläger für alle Fälle mit. – Luaan
Der Code ist in der Tat Reflexion Mumbo-Jumbo. Die Reflektion scheint aufgrund eines veralteten Verweises auf eine DLL, über die wir nachzudenken versuchen, fehlzuschlagen. Aber nicht 100% sicher, weshalb ich versuche, das Problem zuerst ein wenig zu beseitigen. Ich schätze die ausführliche Antwort jedoch. –