Vous pouvez appeler un membre statique sur un type lorsque je n'ai qu'un paramètre générique. Par exemple, si j'ai quelque chose comme çaAppel de membre statique lorsque vous avez uniquement un paramètre générique
public Get<T>(int id)
{
// I would like to do this
string s = T.SomeMethodName();
}
je pouvais le faire comme ça, mais est un peu « dégueu », et il n'a pas d'importance si elle est statique ou non. Ou je pourrais utiliser la réflexion comme suggéré par Yuriy.
ISomeKnownInterface i = (ISomeKnownInterface) new T();
string s = i.SomeMethodName();
Alors question est maintenant qui est meilleure approche, la création d'une nouvelle instance de réflexion à l'aide
public TFormDto Get<TFormDto>(int entityId) where TFormDto : AbstractEntityFormDto, new()
{
// create new instance
AbstractEntityFormDto a = (AbstractEntityFormDto) new TFormDto();
string entityName = a.GetEntityFullTypeName();
// use reflection
Type type = typeof(TFormDto);
string entityName = type.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Single(m => m.Name == "GetEntityFullTypeName")
.Invoke(null, null);
Oui, ce serait. Il me reste à essayer de définir une statique abstraite, ce qui n'est pas autorisé. – epitka
Invoquant la méthode par réflexion comme ceci soit plus rapide que de faire quelque chose comme ça. Il est un peu malchanceux de le faire comme ça, mais bon c'est le code framework AbstractEntityFormDto v = (AbstractEntityFormDto) new TFormDto(); chaîne s = v.EntityFullTypeName; – epitka
Pouvez-vous modifier votre question, je suis confus au sujet de ce que vous venez d'écrire dans ce format. –