Je lisais un Business Primitives par CodeBetter.com et je jouais avec l'idée. En prenant son exemple de Money, comment l'implémenter de manière à ce qu'il puisse être utilisé de la même manière que les types de valeur standard?Surcharge de l'opérateur "Set to equal to"
Ce que je veux dire par là faire:
Money myMoney = 100.00m;
Au lieu de:
Money myMoney = new Money(100.00m);
Je comprends comment remplacer tous les opérateurs pour permettre la fonctionnalité faire des mathématiques etc, mais je n » Je ne sais pas ce qui doit être dépassé pour permettre ce que j'essaie de faire. L'idée est de minimiser les changements de code requis lors de la mise en œuvre du nouveau type, et de garder la même idée qu'il s'agit d'un type primitif, juste avec un nom de type valeur différent et une fonctionnalité de logique métier.
Idéalement, j'aurais hérité de Integer/Float/Decimal ou de tout ce qui est nécessaire, et redéfinir si nécessaire, mais évidemment ce n'est pas disponible pour les structures.
Aha, c'est ce que je cherchais! Est-il possible de le convertir implicitement en un type auquel il est assigné? Pourrais-je avoir par exemple: decimal dec = myMoney; –
@Austitarum Custos: Oui, vous pourriez absolument.Il suffit de dire 'public implicite opérateur décimal décimal (Money money) {return money.Amount; } 'et ensuite' decimal d = money' est parfaitement légal. Donc les mots magiques que vous avez à incantation sont 'opérateur implicite statique public' et ensuite vous donnez le type de retour (donc ici' decimal') et ensuite, en tant que paramètre unique à l'opérateur, un paramètre du type que vous voulez convertir (donc ici 'Money'). Notez que le type de retour ou le type du paramètre doit être le type de la classe englobante. Ainsi 'chaîne d'opérateur implicite statique publique (int i)' n'est pas légale. – jason
Bon à savoir ça marche dans les deux sens, merci! –