parametre adlarıyla oluşturma Dinamik olarak aynı döndürme değerine ve parametre olarak aldığı bir Yöntem Bilgisi ile aynı parametrelere sahip bir temsilci dinamik olarak yaratan bir işlev oluşturmaya çalışıyorum ve bu aynı parametre adları için çok önemlidir. ! Şu ana kadar ne yaptıkDelegeleri dinamik olarak
aynı parametre türlerini alır ve MethodInfo aynı değer döndüren bir lambda döndüren bir işlev oluşturmak ama parametre adları yok:
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);
}
}
mu Bunu nasıl yapabileceğimi öneren var mı? Açıklığa kavuşturmak için, parametre isimlerini önemsememin sebebi, parametre isimleriyle delegeyi aktif hale getirebilmem, bu şekilde onu çağırabilirim (cheer = "YAY!", Yükseklik = 3) (Uygulamam Python ile entegre edilmiştir ve DynamicInvoke olmadan bunu nasıl yapabilirim ve bu aynı zamanda parametre adlarının bu kadar önemli olmasının nedeni de ve ayrıca neden '=' yazmamış ve neden ':' yazdım?
teşekkür I ederiz: Bu uzantı yöntemini kullanır
Daha önce bugün çalıştı ve harika çalıştı! Kodunuzun çoğunu anlıyorum, ancak ad ve nameBase ile yaptığınız şeyi neden kavrayamadım, neden bu tip tabanının adı + türün adıyla eşittir, sayı = 2 ne demektir? Her neyse, ben o güne kadar çalışmak için çalışıyordum –
@UchihaMadara, bu tür adın benzersiz olduğundan emin olmak için bir yol çünkü aynı montajda aynı ada sahip iki türü olamaz çünkü. Ve 2 numara da öyle ki isimler “PersonJump”, “PersonJump2”, “PersonJump3” vb. Gibi. – svick
Bunun çok akıllı olduğunu görüyorum, teşekkürler! =] –