6
votes

C # wrapper pour des objets

Je cherche un moyen de créer une enveloppe générique pour n'importe quel objet.
L'objet wrapper se comportera, tout comme la classe informatique, mais sera en mesure d'avoir plus de propriétés, de variables, de méthodes, etc., par ex. comptage d'objet, mise en cache, etc.

dire que la classe wrapper s'appelle wrapper , et la classe à envelopper s'appelle carré et a le constructeur carré (double edge_len) et les propriétés / méthodes edgelength et zone , je voudrais l'utiliser comme suit: xxx

Évidemment, je peux créer une telle classe d'enveloppe pour chaque classe que je veux envelopper, mais je cherche une solution générale, c'est-à-dire wrapper qui peut gérer les types primitifs et composés ( Bien que dans ma situation actuelle, je serais heureux d'envelopper mes propres cours).

suggestions?

Merci.


2 commentaires

Vous ne pouvez pas faire cela avec C # jusqu'à 3.0. La version 4.0, cependant, peut vous laisser procéder via le nouveau système de type dynamique.


Pourriez-vous s'il vous plaît élaborer? Merci.


3 Réponses :


4
votes

1 commentaires

Merci. Les motifs de décorateur ne conviennent pas, je pense, puisqu'ils me demandent de changer tout mon programme pour les utiliser et que j'aimerais que l'emballage soit transparent de l'utilisateur de T. En ce qui concerne les méthodes d'extension - pouvez-vous utiliser une méthode similaire pour ajouter un variable à la classe (c'est-à-dire à chaque objet)? Ou seulement des méthodes?



2
votes

Peut-être quelque chose comme ceci: xxx pré>

et ensuite vous pouvez l'utiliser comme suit: p>

Wrapper<Square> mySquare = new Wrapper<Square>(new Square(2.5));
Console.Write("Edge {0} -> Area {1}", mySquare.Object.EdgeLength, mySquare.Object.Area);


2 commentaires

Merci, mais c'est ce que j'essaie d'éviter. Je voudrais que l'emballage soit transparent à l'utilisateur de T.


Cette réponse m'aidez beaucoup: D



3
votes

dynamicProxy du projet de château peut être la solution pour vous.


2 commentaires

+1, oui - la question est clairement à la recherche d'une mise en œuvre du proxy. DynamicProxy est largement utilisé dans le monde open source .NET (NMOCK2, NHibernate, Ninject, etc. Tout utilisez-le). La seule mise en garde importante est que vous ne pourrez pas utiliser de proxy pour les classes scellées.


Merci! Cela ressemble vraiment à la solution que je cherchais (bien que je devais creuser davantage).