5
RC versions of 4.0 Frameworkには存在しますが、必要なAPIがRTMで内部にマークされているようです(つまり、CSharpInvokeMemberBinder
は現在内部にあります)。 4.0 RTMで動作するこのコードに相当するものはありますか?DynamicObjectでジェネリックメソッド呼び出しを処理するにはどうすればよいですか?
public class TransparentObject<T> : DynamicObject {
private readonly T target;
public TransparentObject(T target) {
this.target = target;
}
public override bool TryInvokeMember(
InvokeMemberBinder binder, object[] args, out object result) {
var csBinder = binder as CSharpInvokeMemberBinder;
var method = typeof(T).GetMethod(binder.Name, BindingFlags.Public
| BindingFlags.NonPublic | BindingFlags.Instance);
if (method == null)
throw new MissingMemberException(string.Format(
"Method '{0}' not found for type '{1}'", binder.Name, typeof(T)));
if (csBinder.TypeArguments.Count > 0)
method = method.MakeGenericMethod(csBinder.TypeArguments.ToArray());
result = method.Invoke(target, args);
return true;
}
}
(http://bugsquash.blogspot.com/2009/05/testing-private-methods-with-c-40.htmlから取られたコード)
私はここにジェネリック型パラメータを取得するためにリフレクションを使用することができることを承知していますが、私はよりよい解決策を探しています - がある場合。
デュープhttp://stackoverflow.com/questions/5492373/get-generic-type-of-call-to-method-in-dynamic-object – jbtule
転送されたメソッドのDLRを介して推論されたジェネリックスに満足するには、[ImpromptuInterface]を使用してください。http://code.google.com/p/impromptu-interface/wiki/UsageReallyLateBinding推論できないジェネリックのために働くが、それはリフレクションより速いだろう。 – jbtule
@jbtuleはそれをMedium Trustで動作させますか? –