Czy ktoś wie, czy można wywołać metodę obiektu CLR za pośrednictwem indeksu przy użyciu funkcji dynamicznego języka? Na przykład: myClrObj["SuperMethod"]()
, którą mogę łatwo zrobić w javascript.Dynamiczny indeksator C#
z góry.
Czy ktoś wie, czy można wywołać metodę obiektu CLR za pośrednictwem indeksu przy użyciu funkcji dynamicznego języka? Na przykład: myClrObj["SuperMethod"]()
, którą mogę łatwo zrobić w javascript.Dynamiczny indeksator C#
z góry.
Nie może być lepsze sposoby, ale jeden sposób, że wiem, jak to zrobić jest:
DynamicObject
Podaj metodę rozszerzenia, która odpowiednio sprawi, że obiekt będzie wyglądał dynamicznie, z poprawną specjalizacją DynamicObject acja utworzona.
dynamic obj = myObj.AsIndexedObj(); obj["Do"]();
Można użyć ImpromptuInterfsce dostępny poprzez Nuget, owija API DLR aby uprościć dynamicznie wywołać metodę według nazwy, pracuje dla obu obiektów dynamicznych i poco. Szybciej niż odbicie dla obiektów poco.
Impromptu.InvokeMember(myClrObj,"SuperMethod")
Świetny pomysł, ale nie nadaje się. Mam istniejące klasy, które nie są pochodnymi dynamicznymi. – AndrewG
Nie musisz wyprowadzać swoich obiektów z DynamicObject. Zamiast tego utwórz coś w rodzaju adaptera, który dynamicznie współdziała w imieniu oryginalnego obiektu. Ma to tę zaletę, że staje się wielokrotnego użytku dla wielu typów obiektów – flq