Supposons que j'ai une classe de base comme leUtilisation de l'appel arbre d'expression d'une méthode avec le même nom sur 2 classes sans rapport avec
suivantpublic abstract class BaseHelloWorld<T> where T : BaseEntity
{
public abstract IEnumerable<T> DoSomething();
}
et un autre comme
public class BaseEntity
{
public abstract void DoSomethingInPayload();
}
J'ai 4 classes comme:
public class Payload1 : BaseEntity
{
public override void DoSomethingInPayload()
{
Console.Write("Hello world");
}
}
public class Class1 : BaseHelloWorld<Payload1>
{
public override IEnumerable<Payload1> DoSomething()
{
return new List<Payload1> { };
}
}
public class Payload2 : BaseEntity
{
public override void DoSomethingInPayload()
{
Console.Write("Goodbye world");
}
}
public class Class2 : BaseHelloWorld<Payload2>
{
public override IEnumerable<Payload2> DoSomething()
{
return new List<Payload2>() { };
}
}
Bien que j'aie montré du code ici, supposons que ceux-ci soient des bibliothèques tierces que je n'ai pas pour et je veux les prolonger. Ce que je veux faire est d'être en mesure de créer une seule méthode d'extension qui me permettra d'appeler la méthode DoSomethingInPayload() de la classe de charge utile similaire à
public static void CallDoSomething<T>(this BaseHelloWorld<T> theClass) where T: BaseEntity
{
theClass.DoSomethingInPayload();
}
Évidemment, cela ne fonctionne pas, je commencé à chercher si à l'expression des arbres. Ma lecture suggère qu'il est possible de faire avec des arbres d'expression, mais je ne peux pas le comprendre. Après des heures d'essais et d'aller nulle part, je ne suis pas sûr que ma théorie soit correcte. Par conséquent pouvez-vous me dire s'il vous plaît:
A) Est-il possible de le faire avec des arbres d'expression B) Si oui, comment le ferais-je?
Merci à l'avance
Que diriez-vous 'IEnumerable CallDoSomething (ce BaseHelloWorld theClass) '? –
C'est possible, mais pourquoi les arbres d'expression (ou de réflexion) - 'dynamic' sont juste pour cela, par ex. 'return ((theClass) theClass) .DoSomething();' –
car vous ne pouvez pas utiliser dynamique comme le premier paramètre dans les méthodes d'extension – John