3
리플렉션을 사용할 때 DynamicAttribute 특성에 대해 필드, 속성, 인덱서 및 매개 변수를 검사하여 동적 유형이 있는지 확인할 수 있습니다. 그러나 메소드에 대해서는 작동하지 않습니다. '동적'을 반환하더라도 속성이없고 반환 유형이 '객체'이며 속성도 없습니다. Visual Studio는 외부 어셈블리의 메서드에 대한 인텔리 센스를 위해 이것을 수행합니다 ... 리플렉션으로 수행 할 수 있습니까?리플렉션을 사용할 때 메서드에서 동적 유형을 반환하는지 어떻게 결정합니까?
dynamicField is dynamic DynamicProperty is dynamic Item is dynamic DynamicMethod is NOT dynamic!! dynamicParameter is dynamic
예제 코드 :
예를 들어, 아래의 코드는이 출력을 생성 당신이 방법에서 ReturnTypeCustomAttributes
의 속성을 확인해야하기 때문에
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 !! 당신은 기네스 한 잔을받을 자격이 있습니다. –