Je suis à la recherche d'une alternative C# aux typedefs C++ ou aux classes de traits dans un cas spécifique. Je sais qu'il n'y a pas d'équivalents directs, mais peut-être y a-t-il des solutions de rechange à ce problème précis?Type dérivé statiquement en C#?
Voici ce que j'essaie de faire. J'écris un cadre où il y a trois types liés. Une vue, un stockage de sauvegarde et une usine. Il y aura plusieurs implémentations des trois interfaces. Il existe une relation 1-1 entre la vue et l'usine et il existe une relation 1-N entre la vue et le stockage. Un impl implent. de la structure ressemble à ceci:
Storage : IStorage<int> ...
View : IView<Storage> ... // And IView<T> : IViewNonGeneric further up..
Factory : IFactory<Storage> {
// This needs to take a concrete storage type as arg
IViewNonGeneric CreateView(Storage s) ...
Storage CreateStorage() ...
}
La classe View est la classe la plus importante pour les utilisateurs de la structure; les autres sont des détails de mise en œuvre. Pour cette raison, il semblerait plus naturel de définir l'usine en termes de classe View (et non en termes de stockage). En C++ ce serait simple, il suffit d'ajouter un typedef à la vue et l'utiliser dans l'usine, comme ceci:
class IView<typename T> { typedef T TStorage; ...
class IFactory<typename T> {
IViewNonGeneric CreateView(typename T::TStorage s) ...
en C# nous n'avons pas évidemment typedefs ou des classes de traits. Y a-t-il un autre moyen d'accomplir l'effet désiré? Autrement dit, peut-on utiliser View comme paramètre générique de Factory et dériver le type Source concret de la vue?
ne suffit pas d'utiliser 'WHERE' dans la déclaration de génériques pour limiter le type doivent être mis en œuvre? – Tigran