// Attention : ce fichier a été automatiquement généré par un // template T4. Toute modification manuelle sera écrasée !!! using System; using System.Text.RegularExpressions; namespace Developpez.Dotnet.Measures { /// /// Représente une mesure de masse /// public interface IMass { /// /// Obtient la valeur de cette masse en kilogrammes /// double ValueInKilograms { get; } } /// /// Représente une masse en kilogrammes /// public struct Kilogram : IMass, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette masse en kilogrammes public Kilogram(double value) { _value = value; } /// /// Obtient la valeur de cette masse. /// /// /// La valeur de cette masse en kilogrammes /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en kilogrammes. /// /// Résultat de la conversion. /// public static implicit operator Kilogram(double value) { return new Kilogram(value); } /// /// Effectue une conversion explicite de vers . /// /// Masse /// /// Résultat de la conversion. /// public static explicit operator double(Kilogram mass) { return mass.Value; } /// /// Teste l'égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont égales, false sinon. /// public static bool operator ==(Kilogram a, Kilogram b) { return a.Equals(b); } /// /// Teste la non-égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont différentes, false sinon. /// public static bool operator !=(Kilogram a, Kilogram b) { return !(a == b); } /// /// Teste si la première masse est inférieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure à la deuxième, false sinon. /// public static bool operator <(Kilogram a, Kilogram b) { return a.CompareTo(b) < 0; } /// /// Teste si la première masse est supérieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure à la deuxième, false sinon. /// public static bool operator >(Kilogram a, Kilogram b) { return a.CompareTo(b) > 0; } /// /// Teste si la première masse est inférieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Kilogram a, Kilogram b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première masse est supérieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Kilogram a, Kilogram b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux masses. /// /// Première masse /// Deuxième masse /// /// La somme des deux masses. /// public static Kilogram operator +(Kilogram a, Kilogram b) { return new Kilogram(a.Value + b.Value); } /// /// Soustrait la deuxième masse de la première /// /// Première masse /// Deuxième masse /// /// La différence entre les deux masses. /// public static Kilogram operator -(Kilogram a, Kilogram b) { return new Kilogram(a.Value - b.Value); } /// /// Multiplie une masse par un nombre. /// /// Masse /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Kilogram operator *(Kilogram mass, double multiplier) { return new Kilogram(mass.Value*multiplier); } /// /// Divise une masse par un nombre. /// /// Masse /// Diviseur /// /// Le résultat de la division. /// public static Kilogram operator /(Kilogram mass, double divisor) { return new Kilogram(mass.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Kilogram other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0} kg", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Masse. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Kilogram mass) { var regex = new Regex(@"(?.*) ?kg"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { mass = new Kilogram(value); return true; } } mass = new Kilogram(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Kilogram other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Kilogram) return Equals((Kilogram) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IMass /// /// Obtient la valeur de cette masse en kilogrammes /// double IMass.ValueInKilograms { get { return _value; } } #endregion } /// /// Représente une masse en livres /// public struct Pound : IMass, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette masse en livres public Pound(double value) { _value = value; } /// /// Obtient la valeur de cette masse. /// /// /// La valeur de cette masse en livres /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en livres. /// /// Résultat de la conversion. /// public static implicit operator Pound(double value) { return new Pound(value); } /// /// Effectue une conversion explicite de vers . /// /// Masse /// /// Résultat de la conversion. /// public static explicit operator double(Pound mass) { return mass.Value; } /// /// Teste l'égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont égales, false sinon. /// public static bool operator ==(Pound a, Pound b) { return a.Equals(b); } /// /// Teste la non-égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont différentes, false sinon. /// public static bool operator !=(Pound a, Pound b) { return !(a == b); } /// /// Teste si la première masse est inférieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure à la deuxième, false sinon. /// public static bool operator <(Pound a, Pound b) { return a.CompareTo(b) < 0; } /// /// Teste si la première masse est supérieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure à la deuxième, false sinon. /// public static bool operator >(Pound a, Pound b) { return a.CompareTo(b) > 0; } /// /// Teste si la première masse est inférieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Pound a, Pound b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première masse est supérieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Pound a, Pound b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux masses. /// /// Première masse /// Deuxième masse /// /// La somme des deux masses. /// public static Pound operator +(Pound a, Pound b) { return new Pound(a.Value + b.Value); } /// /// Soustrait la deuxième masse de la première /// /// Première masse /// Deuxième masse /// /// La différence entre les deux masses. /// public static Pound operator -(Pound a, Pound b) { return new Pound(a.Value - b.Value); } /// /// Multiplie une masse par un nombre. /// /// Masse /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Pound operator *(Pound mass, double multiplier) { return new Pound(mass.Value*multiplier); } /// /// Divise une masse par un nombre. /// /// Masse /// Diviseur /// /// Le résultat de la division. /// public static Pound operator /(Pound mass, double divisor) { return new Pound(mass.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Pound other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0} lb", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Masse. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Pound mass) { var regex = new Regex(@"(?.*) ?lb"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { mass = new Pound(value); return true; } } mass = new Pound(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Pound other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Pound) return Equals((Pound) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IMass /// /// Obtient la valeur de cette masse en kilogrammes /// double IMass.ValueInKilograms { get { return _value * .45359237; } } #endregion } /// /// Représente une masse en onces /// public struct Ounce : IMass, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette masse en onces public Ounce(double value) { _value = value; } /// /// Obtient la valeur de cette masse. /// /// /// La valeur de cette masse en onces /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en onces. /// /// Résultat de la conversion. /// public static implicit operator Ounce(double value) { return new Ounce(value); } /// /// Effectue une conversion explicite de vers . /// /// Masse /// /// Résultat de la conversion. /// public static explicit operator double(Ounce mass) { return mass.Value; } /// /// Teste l'égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont égales, false sinon. /// public static bool operator ==(Ounce a, Ounce b) { return a.Equals(b); } /// /// Teste la non-égalité de deux masses. /// /// Première masse /// Deuxième masse /// /// true si les deux masses sont différentes, false sinon. /// public static bool operator !=(Ounce a, Ounce b) { return !(a == b); } /// /// Teste si la première masse est inférieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure à la deuxième, false sinon. /// public static bool operator <(Ounce a, Ounce b) { return a.CompareTo(b) < 0; } /// /// Teste si la première masse est supérieure à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure à la deuxième, false sinon. /// public static bool operator >(Ounce a, Ounce b) { return a.CompareTo(b) > 0; } /// /// Teste si la première masse est inférieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Ounce a, Ounce b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première masse est supérieure ou égale à la deuxième. /// /// Première masse /// Deuxième masse /// /// true si la première masse est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Ounce a, Ounce b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux masses. /// /// Première masse /// Deuxième masse /// /// La somme des deux masses. /// public static Ounce operator +(Ounce a, Ounce b) { return new Ounce(a.Value + b.Value); } /// /// Soustrait la deuxième masse de la première /// /// Première masse /// Deuxième masse /// /// La différence entre les deux masses. /// public static Ounce operator -(Ounce a, Ounce b) { return new Ounce(a.Value - b.Value); } /// /// Multiplie une masse par un nombre. /// /// Masse /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Ounce operator *(Ounce mass, double multiplier) { return new Ounce(mass.Value*multiplier); } /// /// Divise une masse par un nombre. /// /// Masse /// Diviseur /// /// Le résultat de la division. /// public static Ounce operator /(Ounce mass, double divisor) { return new Ounce(mass.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Ounce other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0} oz", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Masse. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Ounce mass) { var regex = new Regex(@"(?.*) ?oz"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { mass = new Ounce(value); return true; } } mass = new Ounce(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Ounce other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Ounce) return Equals((Ounce) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IMass /// /// Obtient la valeur de cette masse en kilogrammes /// double IMass.ValueInKilograms { get { return _value * .0283495231; } } #endregion } /// /// Fournit des méthodes d'extension pour les masses /// public static class MassExtensions { /// /// Convertit une masse en kilogrammes /// /// Le type de l'unité d'origine /// Masse à convertir /// Valeur en kilogrammes public static Kilogram ToKilogram(this T mass) where T : IMass { return mass.ValueInKilograms; } /// /// Convertit une masse en livres /// /// Le type de l'unité d'origine /// Masse à convertir /// Valeur en livres public static Pound ToPound(this T mass) where T : IMass { return mass.ValueInKilograms / .45359237; } /// /// Convertit une masse en onces /// /// Le type de l'unité d'origine /// Masse à convertir /// Valeur en onces public static Ounce ToOunce(this T mass) where T : IMass { return mass.ValueInKilograms / .0283495231; } } }