Je pourrais utiliser de très bons liens qui expliquent les Génériques et comment les utiliser. Mais j'ai aussi une question très spécifique, relater à travailler sur un projet en cours.Besoin d'aide pour comprendre Génériques, Comment Types Abstrait Question
Compte tenu de ce constructeur de classe:
public class SecuredDomainViewModel<TDomainContext, TEntity> : DomainViewModel<TDomainContext, TEntity>
where TDomainContext : DomainContext, new()
where TEntity : Entity, new()
public SecuredDomainViewModel(TDomainContext domainContext, ProtectedItem protectedItem)
: base(domainContext)
{
this.protectedItem = protectedItem;
}
Et sa création ainsi:
DomainViewModel d;
d = new SecuredDomainViewModel<MyContext, MyEntityType>(this.context, selectedProtectedItem);
En supposant que j'ai 20 EntityTypes différents au sein MyContext, est-il plus facile de appeler le constructeur sans un grand changer d'instruction?
De plus, puisque d est DomainViewModel et j'ai besoin plus tard pour accéder à des méthodes de SecuredDomainViewModel, il semble que je dois faire ceci:
if (((SecuredDomainViewModel<MyContext, MyEntityType>)d).CanEditEntity)
Mais encore une fois « MyEntityType » pourrait en fait être l'un des 20 types diffent. Est-il possible d'écrire ces types d'instructions où MyEntityType est renvoyé à partir d'une sorte de réflexion?
Informations supplémentaires pour la clarification: Je vais enquêter sur ConstructorInfo, mais je pense que j'ai peut-être mal décrit ce que je cherche à faire.
Supposons que j'ai le DomainViewModel, d dans mon message d'origine.
Cela peut avoir été construit par trois voies possibles:
d = new SecuredDomainViewModel<MyContext, Order>(this.context, selectedProtectedItem);
d = new SecuredDomainViewModel<MyContext, Invoice>(this.context, selectedProtectedItem);
d = new SecuredDomainViewModel<MyContext, Consumer>(this.context, selectedProtectedItem);
plus tard, je dois accéder à des méthodes sur le SecuredDomainViewModel, qui doit actuellement être appelé de cette façon:
ex: if (((SecuredDomainViewModel<MyContext, Order)d).CanEditEntity)
ex: if (((SecuredDomainViewModel<MyContext, Invoice)d).CanEditEntity)
ex: if (((SecuredDomainViewModel<MyContext, Consumer)d).CanEditEntity)
En supposant que je N + types entité dans ce contexte, ce que j'espérais pouvoir faire est quelque chose comme ça avec un seul appel:
ex: if (((SecuredDomainViewModel<MyContext, CurrentEntityType)d).CanEditEntity)
Où CurrentEntityType était une sorte de fonction ou un autre type d'appel renvoyant Order, Invoice ou Consumer en fonction du type d'entité de l'élément en cours.
Est-ce possible?
Pourriez-vous expliquer ce que vous essayez de faire? Je ne suis pas en train de gâcher le point de cette question. – jfar
Fondamentalement, je voudrais être en mesure de dom quelque chose comme ça, mais je sais que cette façon spécifique n'est pas possible: Type entityType; entityType = "Commandes" if (((SecuredDomainViewModel) d) .CanEditEntity) –
kmacmahon