2010-11-07 5 views
2

J'écris une classe RationalNumber en C# et je voudrais la rendre générique, mais en n'autorisant que des entiers (int, octet, UInt32, ma propre classe BigInt ...) en entrées - il Cela n'a aucun sens d'avoir un nombre rationnel basé sur des flottants ou même des objets réguliers comme Control.Générique ne permettant que des entiers comme argument de type

Cependant, il ne semble pas que je puisse filtrer les types non-entiers lors de la déclaration de la classe.

Ai-je oublié quelque chose?

Répondre

2

Non, vous ne pouvez pas.

Et vous avez le problème supplémentaire qu'il n'y a aucune contrainte arithmetic non plus. Il n'y a donc pas de manière statique d'utiliser les opérateurs de votre argument type. Vous aurez donc besoin d'utiliser dynamic qui est plus lent (à moins d'avoir amélioré le runtime/jitter depuis .net 3.5).

Certains projets avec des problèmes similaires n'ont pas rendu la classe générique du tout, et ont utilisé un générateur de code pour la spécialiser à la place.

Questions connexes