Comment obtenir de l'interface basetype par la réflexion?
public interface IBar {}
public interface IFoo : IBar {}
typeof(IFoo).BaseType == null
Comment puis-je obtenir Bira?
Vous devez vous connecter pour publier un commentaire.
public interface IBar {}
public interface IFoo : IBar {}
typeof(IFoo).BaseType == null
Comment puis-je obtenir Bira?
Vous devez vous connecter pour publier un commentaire.
Edit: Si vous souhaitez IBar, vous pouvez le faire:
IBar
a un Argument Générique? Et l'argument n'est pas connu."IBar<>"
ne fonctionne pas.interface IBar<T>
nom (dans le but deGetInterface
) estIBar`1
.GetType().Assembly.GetTypes().Where(type => type.GetInterface(typeof(IPrefabForXmlInstantiater<>).Name) != null);
fonctionne maisGetType().Assembly.GetTypes().Where(type => type.GetInterfaces().Contains(typeof(IPrefabForXmlInstantiater<>)));
doen't ;/nameof
pour obtenir le nom de typeType type = typeof(IFoo).GetInterface(nameof(IBar));
Une interface n'est pas un type de base. Les Interfaces ne font pas partie de l'arbre d'héritage.
Pour obtenir l'accès aux interfaces de la liste, vous pouvez utiliser:
ou si vous connaissez le nom de l'interface:
Si vous êtes seulement intéressé dans le fait de savoir si un type est implicitement compatible avec un autre type (qui je pense est ce que vous cherchez), le type d'utilisation.IsAssignableFrom(fromType). C'est l'équivalent de " est " mot clé, mais avec runtime types.
Exemple:
Est équivalent à:
Mais dans votre cas, vous êtes probablement plus intéressé par:
En outre à ce que les autres affiches écrit, vous pouvez obtenir la première interface à partir de la GetInterface() de la liste (si la liste n'est pas vide) pour obtenir le parent direct de IFoo. Ce serait l'équivalent exact de votre .BaseType tentative.