Ich stehe zur Zeit ein Problem beim Erstellen von Stellvertretern von MethodInfo
. Mein übergeordnetes Ziel ist es, die Methoden einer Klasse durchzugehen und Delegaten für diejenigen zu erstellen, die mit einem bestimmten Attribut markiert sind. Ich versuche, CreateDelegate
zu verwenden, aber ich erhalte den folgenden Fehler.Erstellen von Delegat von MethodInfo
Die Bindung an die Zielmethode ist nicht möglich, da ihre Signatur- oder Sicherheitstransparenz nicht mit der des Delegattyps kompatibel ist.
Hier ist mein Code
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;
}
}
Macht Sinn, das funktioniert gut. Ich hatte die Beschreibung direkt nach dem Posten gelesen und sah, dass sie statische Funktion hatte. Danke, dass Sie darauf hingewiesen haben, wie es mit einer Instanz funktioniert. – thecaptain0220