2010-02-15 1 views
5

In C# 4, quando derivano da DynamicObject e Overridding TryInvokeMember, come è possibile determinare se i parametri forniti nel sito di chiamata sono stati trasferiti con o senza semantica? Riesco a vedere alcuni campi privati ​​nel raccoglitore fornito che contengono queste informazioni (vale a dire la proprietà Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder.ArgumentInfo) ma sembra inaccessibile. Presumo che queste informazioni debbano essere disponibili da qualche parte altrimenti limiterebbero seriamente la propria conoscenza dell'input fornito.C# 4: Determinazione della semantica di passaggio dei parametri nelle chiamate dinamiche

risposta

2

Ho parlato con il team DLR di questo. Sfortunatamente, la risposta è no, questa informazione non è disponibile per DynamicObject.

Il motivo è che i parametri di rif/out sono specifici per C#. E gli oggetti dinamici possono essere condivisi tra molte lingue e non tutte le lingue hanno queste notazioni. DynamicObject è "call-by-value", quindi i tuoi oggetti possono essere utilizzati da API diverse.

+0

Grazie per l'aiuto. Sospettavo che non sarebbe stato possibile. –