// 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 longueur /// public interface IVolume { /// /// Obtient la valeur de ce volume en mètres cubes /// double ValueInCubeMeters { get; } } /// /// Représente un volume en mètres cubes /// public struct CubeMeter : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en mètres cubes public CubeMeter(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en mètres cubes /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en mètres cubes. /// /// Résultat de la conversion. /// public static implicit operator CubeMeter(double value) { return new CubeMeter(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(CubeMeter volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(CubeMeter a, CubeMeter b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(CubeMeter a, CubeMeter b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(CubeMeter a, CubeMeter b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(CubeMeter a, CubeMeter b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(CubeMeter a, CubeMeter b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(CubeMeter a, CubeMeter b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static CubeMeter operator +(CubeMeter a, CubeMeter b) { return new CubeMeter(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static CubeMeter operator -(CubeMeter a, CubeMeter b) { return new CubeMeter(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static CubeMeter operator *(CubeMeter volume, double multiplier) { return new CubeMeter(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static CubeMeter operator /(CubeMeter volume, double divisor) { return new CubeMeter(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(CubeMeter 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} m³", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out CubeMeter volume) { var regex = new Regex(@"(?.*) ?m³"); 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)) { volume = new CubeMeter(value); return true; } } volume = new CubeMeter(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(CubeMeter 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 CubeMeter) return Equals((CubeMeter) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value; } } #endregion } /// /// Représente un volume en litres /// public struct Liter : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en litres public Liter(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en litres /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en litres. /// /// Résultat de la conversion. /// public static implicit operator Liter(double value) { return new Liter(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(Liter volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(Liter a, Liter b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(Liter a, Liter b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(Liter a, Liter b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(Liter a, Liter b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Liter a, Liter b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Liter a, Liter b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static Liter operator +(Liter a, Liter b) { return new Liter(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static Liter operator -(Liter a, Liter b) { return new Liter(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Liter operator *(Liter volume, double multiplier) { return new Liter(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static Liter operator /(Liter volume, double divisor) { return new Liter(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Liter 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} l", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Liter volume) { var regex = new Regex(@"(?.*) ?l"); 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)) { volume = new Liter(value); return true; } } volume = new Liter(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(Liter 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 Liter) return Equals((Liter) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .001; } } #endregion } /// /// Représente un volume en pintes /// public struct Pint : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en pintes public Pint(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en pintes /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en pintes. /// /// Résultat de la conversion. /// public static implicit operator Pint(double value) { return new Pint(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(Pint volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(Pint a, Pint b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(Pint a, Pint b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(Pint a, Pint b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(Pint a, Pint b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Pint a, Pint b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Pint a, Pint b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static Pint operator +(Pint a, Pint b) { return new Pint(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static Pint operator -(Pint a, Pint b) { return new Pint(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Pint operator *(Pint volume, double multiplier) { return new Pint(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static Pint operator /(Pint volume, double divisor) { return new Pint(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Pint 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} pt", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Pint volume) { var regex = new Regex(@"(?.*) ?pt"); 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)) { volume = new Pint(value); return true; } } volume = new Pint(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(Pint 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 Pint) return Equals((Pint) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .00056826125; } } #endregion } /// /// Représente un volume en gallons impériaux /// public struct Gallon : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en gallons impériaux public Gallon(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en gallons impériaux /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en gallons impériaux. /// /// Résultat de la conversion. /// public static implicit operator Gallon(double value) { return new Gallon(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(Gallon volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(Gallon a, Gallon b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(Gallon a, Gallon b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(Gallon a, Gallon b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(Gallon a, Gallon b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Gallon a, Gallon b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Gallon a, Gallon b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static Gallon operator +(Gallon a, Gallon b) { return new Gallon(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static Gallon operator -(Gallon a, Gallon b) { return new Gallon(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Gallon operator *(Gallon volume, double multiplier) { return new Gallon(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static Gallon operator /(Gallon volume, double divisor) { return new Gallon(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Gallon 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} gal GB", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Gallon volume) { var regex = new Regex(@"(?.*) ?gal GB"); 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)) { volume = new Gallon(value); return true; } } volume = new Gallon(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(Gallon 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 Gallon) return Equals((Gallon) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .00454609; } } #endregion } /// /// Représente un volume en gallons US /// public struct USGallon : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en gallons US public USGallon(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en gallons US /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en gallons US. /// /// Résultat de la conversion. /// public static implicit operator USGallon(double value) { return new USGallon(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(USGallon volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(USGallon a, USGallon b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(USGallon a, USGallon b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(USGallon a, USGallon b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(USGallon a, USGallon b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(USGallon a, USGallon b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(USGallon a, USGallon b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static USGallon operator +(USGallon a, USGallon b) { return new USGallon(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static USGallon operator -(USGallon a, USGallon b) { return new USGallon(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static USGallon operator *(USGallon volume, double multiplier) { return new USGallon(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static USGallon operator /(USGallon volume, double divisor) { return new USGallon(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(USGallon 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} gal US", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out USGallon volume) { var regex = new Regex(@"(?.*) ?gal US"); 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)) { volume = new USGallon(value); return true; } } volume = new USGallon(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(USGallon 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 USGallon) return Equals((USGallon) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .003785411784; } } #endregion } /// /// Représente un volume en onces liquides impériales /// public struct FluidOunce : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en onces liquides impériales public FluidOunce(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en onces liquides impériales /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en onces liquides impériales. /// /// Résultat de la conversion. /// public static implicit operator FluidOunce(double value) { return new FluidOunce(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(FluidOunce volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(FluidOunce a, FluidOunce b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(FluidOunce a, FluidOunce b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(FluidOunce a, FluidOunce b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(FluidOunce a, FluidOunce b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(FluidOunce a, FluidOunce b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(FluidOunce a, FluidOunce b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static FluidOunce operator +(FluidOunce a, FluidOunce b) { return new FluidOunce(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static FluidOunce operator -(FluidOunce a, FluidOunce b) { return new FluidOunce(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static FluidOunce operator *(FluidOunce volume, double multiplier) { return new FluidOunce(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static FluidOunce operator /(FluidOunce volume, double divisor) { return new FluidOunce(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(FluidOunce 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} fl oz", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out FluidOunce volume) { var regex = new Regex(@"(?.*) ?fl 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)) { volume = new FluidOunce(value); return true; } } volume = new FluidOunce(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(FluidOunce 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 FluidOunce) return Equals((FluidOunce) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .0000284130625; } } #endregion } /// /// Représente un volume en onces liquides US /// public struct USFluidOunce : IVolume, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de ce volume en onces liquides US public USFluidOunce(double value) { _value = value; } /// /// Obtient la valeur de ce volume. /// /// /// La valeur de ce volume en onces liquides US /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en onces liquides US. /// /// Résultat de la conversion. /// public static implicit operator USFluidOunce(double value) { return new USFluidOunce(value); } /// /// Effectue une conversion explicite de vers . /// /// Volume /// /// Résultat de la conversion. /// public static explicit operator double(USFluidOunce volume) { return volume.Value; } /// /// Teste l'égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont égaux, false sinon. /// public static bool operator ==(USFluidOunce a, USFluidOunce b) { return a.Equals(b); } /// /// Teste la non-égalité de deux volumes. /// /// Premier volume /// Deuxième volume /// /// true si les deux volumes sont différents, false sinon. /// public static bool operator !=(USFluidOunce a, USFluidOunce b) { return !(a == b); } /// /// Teste si le premier volume est inférieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur au deuxième, false sinon. /// public static bool operator <(USFluidOunce a, USFluidOunce b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier volume est supérieur au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur au deuxième, false sinon. /// public static bool operator >(USFluidOunce a, USFluidOunce b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier volume est inférieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(USFluidOunce a, USFluidOunce b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier volume est supérieur ou égal au deuxième. /// /// Premier volume /// Deuxième volume /// /// true si le premier volume est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(USFluidOunce a, USFluidOunce b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux volumes. /// /// Premier volume /// Deuxième volume /// /// La somme des deux volumes. /// public static USFluidOunce operator +(USFluidOunce a, USFluidOunce b) { return new USFluidOunce(a.Value + b.Value); } /// /// Soustrait le deuxième volume du premier /// /// Premier volume /// Deuxième volume /// /// La différence entre les deux volumes. /// public static USFluidOunce operator -(USFluidOunce a, USFluidOunce b) { return new USFluidOunce(a.Value - b.Value); } /// /// Multiplie un volume par un nombre. /// /// volume /// Multiplicateur /// /// Le résultat de la multiplication. /// public static USFluidOunce operator *(USFluidOunce volume, double multiplier) { return new USFluidOunce(volume.Value*multiplier); } /// /// Divise un volume par un nombre. /// /// volume /// Diviseur /// /// Le résultat de la division. /// public static USFluidOunce operator /(USFluidOunce volume, double divisor) { return new USFluidOunce(volume.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érieur à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// supérieur à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(USFluidOunce 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} fl oz", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// volume. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out USFluidOunce volume) { var regex = new Regex(@"(?.*) ?fl 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)) { volume = new USFluidOunce(value); return true; } } volume = new USFluidOunce(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(USFluidOunce 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 USFluidOunce) return Equals((USFluidOunce) 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 IVolume /// /// Obtient la valeur de cette volume en mètres cubes /// double IVolume.ValueInCubeMeters { get { return _value * .0000295735295625; } } #endregion } /// /// Fournit des méthodes d'extension pour les volumes /// public static class VolumeExtensions { /// /// Convertit un volume en mètres cubes /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en mètres cubes public static CubeMeter ToCubeMeter(this T volume) where T : IVolume { return volume.ValueInCubeMeters; } /// /// Convertit un volume en litres /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en litres public static Liter ToLiter(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .001; } /// /// Convertit un volume en pintes /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en pintes public static Pint ToPint(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .00056826125; } /// /// Convertit un volume en gallons impériaux /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en gallons impériaux public static Gallon ToGallon(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .00454609; } /// /// Convertit un volume en gallons US /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en gallons US public static USGallon ToUSGallon(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .003785411784; } /// /// Convertit un volume en onces liquides impériales /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en onces liquides impériales public static FluidOunce ToFluidOunce(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .0000284130625; } /// /// Convertit un volume en onces liquides US /// /// Le type de l'unité d'origine /// volume à convertir /// Valeur en onces liquides US public static USFluidOunce ToUSFluidOunce(this T volume) where T : IVolume { return volume.ValueInCubeMeters / .0000295735295625; } } }