Może używasz wzorca dynamicznego? Możesz wywołać dowolną metodę / właściwość za pomocą dynamicznego słowa kluczowego, prawda? Jak na przykład sprawdzić, czy metoda istnieje przed wywołaniem myDynamicObject.DoStuff ()?
c#
.net
methods
reflection
properties
Louis Rhys
źródło
źródło
DynamicObject
?Odpowiedzi:
Możesz napisać coś takiego:
Edycja: możesz nawet wykonać metodę rozszerzenia i używać jej w ten sposób
źródło
poprzez refleksję
Podobnie jest z metodami
źródło
GetType()
tym jest metodaGetProperties()
. Zwraca tablicęPropertyInfo
. Ale jak mogę użyćGetProperties()
metody?To stare pytanie, ale właśnie na nie wpadłem.
Type.GetMethod(string name)
zgłosi AmbiguousMatchException, jeśli istnieje więcej niż jedna metoda o tej nazwie, więc lepiej obsłużmy ten przypadekźródło
Czy nie byłoby lepiej nie używać do tego żadnych typów dynamicznych i pozwolić swojej klasie zaimplementować interfejs. Następnie możesz sprawdzić w czasie wykonywania, czy obiekt implementuje ten interfejs, a zatem ma oczekiwaną metodę (lub właściwość).
Myślę, że to jedyny właściwy sposób.
Rzecz, do której się odnosisz, to pisanie kaczkowe, co jest przydatne w scenariuszach, w których wiesz już, że obiekt ma metodę, ale kompilator nie może tego sprawdzić. Jest to przydatne na przykład w scenariuszach międzyoperacyjnych modelu COM. (sprawdź ten artykuł)
Jeśli chcesz na przykład połączyć pisanie kaczką z refleksją, myślę, że nie osiągasz celu, jakim jest pisanie kaczką.
źródło