J'ai une classe comme ceci:dans .NET en utilisant transtypage ascendant génériques
public class A {
internal A(int i) { ... }
public int Foo { get; set; }
}
Cette classe est alors héritée par un groupe de classes générées, par exemple:
public class B : A {
...
}
La base int
Le constructeur n'est pas exposé à la classe héritée (pour des raisons de conception, je ne veux pas qu'il soit exposé). Dans ma bibliothèque qui contient la définition de la classe A
j'ai une méthode comme ceci:
public T Load<T>() where T : A {
//do some stuff, create an instance of T from an int, then return it
}
Et puis je l'utiliser comme ceci:
B b = Helper.Load<B>();
Depuis le constructeur que je veux utiliser n'est pas exposé à la classe B
quand je fais typeof(T).GetConstructor(typeof(int))
Je ne rentre pas le constructeur, donc je veux penser que je ferais ceci:
return (T)new A(/*some int */);
Mais cela me donne un ru Erreur de temps System.InvalidCastException
, que je ne peux pas convertir un type A en type B.
Comment puis-je procéder à cette surenchère?
Oui, c'est ce que je vais faire maintenant. Fonctionne bien –