c# delegates attributes methodinfo

c# - Creando delegado de MethodInfo



delegates attributes (2)

Está intentando crear un delegado desde un método de instancia , pero no está pasando un objetivo.

Podrías usar:

Delegate.CreateDelegate(typeof(TestDelagate), this, method);

... o podrías hacer tu método estático.

(Si necesita hacer frente a ambos tipos de métodos, deberá hacerlo condicionalmente, o pasar el null como el argumento central).

Actualmente me encuentro con un problema al intentar crear delegados de MethodInfo . Mi objetivo general es examinar los métodos en una clase y crear delegados para aquellos marcados con un determinado atributo. Estoy intentando usar CreateDelegate pero CreateDelegate el siguiente error.

No se puede enlazar con el método de destino porque su firma o transparencia de seguridad no es compatible con la del tipo de delegado.

Aqui esta mi codigo

public class TestClass { public delegate void TestDelagate(string test); private List<TestDelagate> delagates = new List<TestDelagate>(); public TestClass() { foreach (MethodInfo method in this.GetType().GetMethods()) { if (TestAttribute.IsTest(method)) { TestDelegate newDelegate = (TestDelagate)Delegate.CreateDelegate(typeof(TestDelagate), method); delegates.Add(newDelegate); } } } [Test] public void TestFunction(string test) { } } public class TestAttribute : Attribute { public static bool IsTest(MemberInfo member) { bool isTestAttribute = false; foreach (object attribute in member.GetCustomAttributes(true)) { if (attribute is TestAttribute) isTestAttribute = true; } return isTestAttribute; } }


Necesita una firma diferente para el delegado, si no tiene un objetivo. El objetivo debe ser pasado como primer argumento.

public class TestClass { public delegate void TestDelagate(TestClass instance, string test); private List<TestDelagate> delagates = new List<TestDelagate>(); public TestClass() { foreach (MethodInfo method in this.GetType().GetMethods()) { if (TestAttribute.IsTest(method)) { TestDelegate newDelegate = (TestDelagate)Delegate.CreateDelegate(typeof(TestDelagate), null, method); delegates.Add(newDelegate); //Invocation: newDelegate.DynamicInvoke(this, "hello"); } } } [Test] public void TestFunction(string test) { } }