La classe System.Type fournit une méthode GetInterfaces() qui "obtient toutes les interfaces implémentées ou héritées par le type actuel". Le problème est que "La méthode GetInterfaces ne renvoie pas les interfaces dans un ordre particulier, tel que l'ordre alphabétique ou de déclaration.Votre code ne doit pas dépendre de l'ordre dans lequel les interfaces sont retournées, car cet ordre varie". Dans mon cas, cependant, je dois isoler et exposer (via WCF) uniquement les interfaces feuille de la hiérarchie d'interface, c'est-à-dire les interfaces qui ne sont pas héritées par d'autres interfaces dans cette hiérarchie. Par exemple, considérons la hiérarchie suivanteRécupération des interfaces de feuille d'un type
interface IA { }
interface IB : IA { }
interface IC : IB { }
interface ID : IB { }
interface IE : IA { }
class Foo : IC, IE {}
interfaces feuille de Foo sont IC et IE, alors que GetInterfaces() renverra toutes les 5 interfaces (IA..IE). Une méthode FindInterfaces() est également fournie, vous permettant de filtrer les interfaces susmentionnées en utilisant un prédicat de votre choix.
Ma mise en œuvre actuelle est donnée ci-dessous. C'est O (n^2) où n est le nombre d'interfaces que le type implémente. Je me demandais s'il y avait une façon plus efficace et/ou efficace de le faire.
private Type[] GetLeafInterfaces(Type type)
{
return type.FindInterfaces((candidateIfc, allIfcs) =>
{
foreach (Type ifc in (Type[])allIfcs)
{
if (candidateIfc != ifc && candidateIfc.IsAssignableFrom(ifc))
return false;
}
return true;
}
,type.GetInterfaces());
}
Merci à l'avance
Merci! Peut-être que ma fonction GetLeafInterfaces() pourrait être utile à quelqu'un dans le futur, alors –