안녕하세요 저는 동일한 반환 값과 매개 변수로받는 MethodInfo와 동일한 매개 변수를 사용하여 대리인을 동적으로 만드는 함수를 만들려고합니다.이 매개 변수 이름은 매우 중요합니다 ! 내가 지금까지 무슨 짓을매개 변수 이름을 사용하여 대리자를 동적으로 만들기
같은 매개 변수 유형을 수신하고 MethodInfo과 같은 반환 값이 람다를 반환하는 함수를 만드는 것입니다하지만 매개 변수 이름을 가지고 있지 않습니다
static void Example()
{
Person adam = new Person();
MethodInfo method = typeof(Person).GetMethod("Jump");
Delegate result = CreateDelegate(adam, method);
result.DynamicInvoke((uint)4, "Yeahaa");
}
private static Delegate CreateDelegate(object instance, MethodInfo method)
{
var parametersInfo = method.GetParameters();
Expression[] expArgs = new Expression[parametersInfo.Length];
List<ParameterExpression> lstParamExpressions = new List<ParameterExpression>();
for (int i = 0; i < expArgs.Length; i++)
{
expArgs[i] = Expression.Parameter(parametersInfo[i].ParameterType, parametersInfo[i].Name);
lstParamExpressions.Add((ParameterExpression)expArgs[i]);
}
MethodCallExpression callExpression = Expression.Call(Expression.Constant(instance), method, expArgs);
LambdaExpression lambdaExpression = Expression.Lambda(callExpression, lstParamExpressions);
return lambdaExpression.Compile();
}
private class Person
{
public void Jump(uint height, string cheer)
{
Console.WriteLine("Person jumped " + height + " "+ cheer);
}
}
합니까 누구든지 내가 그걸 어떻게 할 수 있는지 어떤 제안이 있니? 매개 변수 이름에 관심이있는 이유는 매개 변수 이름을 가진 대리인을 활성화 할 수 있도록하기 위해서입니다. (cheer = "YAY!", height = 3) 내 응용 프로그램은 내가 DynamicInvoke없이 그것을 할 수 있습니다 방법은 파이썬과 통합이 매개 변수 이름은 중요한 이유도 이유도 나는 '='작성하지 왜 ':')
는 I 감사 :이 확장 방법을 사용
오늘 일찍 시험해 보니 좋았어요 !! 대부분의 코드를 이해하지만 실제로 이름과 이름을 사용하여 수행중인 작업을 파악할 수 없습니다.베이스, 형식베이스 이름 + 유형 이름과 같은 이유는 무엇입니까? 숫자는 무엇입니까? 어쨌든 고맙습니다. 일간의 노력에 감사드립니다. –
@UchihaMadara, 동일한 어셈블리에서 같은 이름을 가진 두 가지 유형을 가질 수 없기 때문에 형식 이름이 고유한지 확인하는 것입니다. 그리고 숫자 2는'PersonJump','PersonJump2','PersonJump3' 등과 같은 이름입니다. – svick
정말 똑똑합니다. 고마워요! =] –