3
リフレクションを使用する場合、フィールドにダイナミックタイプがあるかどうかを判断するために、DynamicAttribute属性のフィールド、プロパティ、インデクサ、およびパラメータを調べることができます。しかし、これはメソッドでは機能しません。たとえ '動的'を返しても、属性がなく、戻り値の型は 'object'です(属性もありません)。 Visual Studioは、外部アセンブリのメソッドのインテリセンスのためにこれを行います...リフレクションで行うことはできますか?例えばリフレクションを使用しているときにメソッドが動的な型を返すかどうかをどのように判断しますか?
は、以下のコードは、この出力を生成します
dynamicField is dynamic DynamicProperty is dynamic Item is dynamic DynamicMethod is NOT dynamic!! dynamicParameter is dynamic
例コード:
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace ReflectDynamics
{
class Program
{
static void Main()
{
var test = typeof(Test);
CheckDynamic(test.GetField("dynamicField"));
CheckDynamic(test.GetProperty("DynamicProperty"));
CheckDynamic(test.GetProperty("Item"));
MethodInfo dynamicMethod = test.GetMethod("DynamicMethod");
CheckDynamic(dynamicMethod);
CheckDynamic(dynamicMethod.GetParameters()[0]);
Console.ReadKey();
}
static void CheckDynamic(MemberInfo memberInfo)
{
bool isDynamic = memberInfo.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0;
Console.WriteLine(memberInfo.Name + (isDynamic ? " is dynamic" : " is NOT dynamic!!"));
}
static void CheckDynamic(ParameterInfo parameterInfo)
{
bool isDynamic = parameterInfo.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0;
Console.WriteLine(parameterInfo.Name + (isDynamic ? " is dynamic" : " is NOT dynamic!!"));
}
}
class Test
{
public dynamic dynamicField;
public dynamic DynamicProperty { get { return dynamicField; } }
public dynamic this[int index] { get { return dynamicField; } }
public dynamic DynamicMethod(dynamic dynamicParameter) { return dynamicField; }
}
}
恐ろしい!ありがとう、Dave !!あなたはギネスのパイントに値するでしょう。 –