// 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 ILength { /// /// Obtient la valeur de cette longueur en mètres /// double ValueInMeters { get; } } /// /// Représente une longueur en mètres /// public struct Meter : ILength, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette longueur en mètres. public Meter(double value) { _value = value; } /// /// Obtient la valeur de cette longueur. /// /// /// La valeur de cette longueur en mètres /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en mètres. /// /// Résultat de la conversion. /// public static implicit operator Meter(double value) { return new Meter(value); } /// /// Effectue une conversion explicite de vers . /// /// Longueur /// /// Résultat de la conversion. /// public static explicit operator double(Meter length) { return length.Value; } /// /// Teste l'égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont égales, false sinon. /// public static bool operator ==(Meter a, Meter b) { return a.Equals(b); } /// /// Teste la non-égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont différentes, false sinon. /// public static bool operator !=(Meter a, Meter b) { return !(a == b); } /// /// Teste si la première longueur est inférieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure à la deuxième, false sinon. /// public static bool operator <(Meter a, Meter b) { return a.CompareTo(b) < 0; } /// /// Teste si la première longueur est supérieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure à la deuxième, false sinon. /// public static bool operator >(Meter a, Meter b) { return a.CompareTo(b) > 0; } /// /// Teste si la première longueur est inférieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Meter a, Meter b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première longueur est supérieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Meter a, Meter b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// La somme des deux longueurs. /// public static Meter operator +(Meter a, Meter b) { return new Meter(a.Value + b.Value); } /// /// Soustrait la deuxième longueur de la première /// /// Première longueur /// Deuxième longueur /// /// La différence entre les deux longueurs. /// public static Meter operator -(Meter a, Meter b) { return new Meter(a.Value - b.Value); } /// /// Multiplie une longueur par un nombre. /// /// Longueur /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Meter operator *(Meter length, double multiplier) { return new Meter(length.Value*multiplier); } /// /// Divise une longueur par un nombre. /// /// Longueur /// Diviseur /// /// Le résultat de la division. /// public static Meter operator /(Meter length, double divisor) { return new Meter(length.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(Meter 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. /// Longueur. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Meter length) { 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)) { length = new Meter(value); return true; } } length = new Meter(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(Meter 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 Meter) return Equals((Meter) 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 ILength /// /// Obtient la valeur de cette longueur en mètres /// double ILength.ValueInMeters { get { return _value; } } #endregion } /// /// Représente une longueur en pieds /// public struct Foot : ILength, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette longueur en pieds. public Foot(double value) { _value = value; } /// /// Obtient la valeur de cette longueur. /// /// /// La valeur de cette longueur en pieds /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en pieds. /// /// Résultat de la conversion. /// public static implicit operator Foot(double value) { return new Foot(value); } /// /// Effectue une conversion explicite de vers . /// /// Longueur /// /// Résultat de la conversion. /// public static explicit operator double(Foot length) { return length.Value; } /// /// Teste l'égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont égales, false sinon. /// public static bool operator ==(Foot a, Foot b) { return a.Equals(b); } /// /// Teste la non-égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont différentes, false sinon. /// public static bool operator !=(Foot a, Foot b) { return !(a == b); } /// /// Teste si la première longueur est inférieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure à la deuxième, false sinon. /// public static bool operator <(Foot a, Foot b) { return a.CompareTo(b) < 0; } /// /// Teste si la première longueur est supérieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure à la deuxième, false sinon. /// public static bool operator >(Foot a, Foot b) { return a.CompareTo(b) > 0; } /// /// Teste si la première longueur est inférieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Foot a, Foot b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première longueur est supérieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Foot a, Foot b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// La somme des deux longueurs. /// public static Foot operator +(Foot a, Foot b) { return new Foot(a.Value + b.Value); } /// /// Soustrait la deuxième longueur de la première /// /// Première longueur /// Deuxième longueur /// /// La différence entre les deux longueurs. /// public static Foot operator -(Foot a, Foot b) { return new Foot(a.Value - b.Value); } /// /// Multiplie une longueur par un nombre. /// /// Longueur /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Foot operator *(Foot length, double multiplier) { return new Foot(length.Value*multiplier); } /// /// Divise une longueur par un nombre. /// /// Longueur /// Diviseur /// /// Le résultat de la division. /// public static Foot operator /(Foot length, double divisor) { return new Foot(length.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(Foot 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} ft", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Longueur. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Foot length) { var regex = new Regex(@"(?.*) ?ft"); 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)) { length = new Foot(value); return true; } } length = new Foot(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(Foot 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 Foot) return Equals((Foot) 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 ILength /// /// Obtient la valeur de cette longueur en mètres /// double ILength.ValueInMeters { get { return _value * .3048; } } #endregion } /// /// Représente une longueur en pouces /// public struct Inch : ILength, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette longueur en pouces. public Inch(double value) { _value = value; } /// /// Obtient la valeur de cette longueur. /// /// /// La valeur de cette longueur en pouces /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en pouces. /// /// Résultat de la conversion. /// public static implicit operator Inch(double value) { return new Inch(value); } /// /// Effectue une conversion explicite de vers . /// /// Longueur /// /// Résultat de la conversion. /// public static explicit operator double(Inch length) { return length.Value; } /// /// Teste l'égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont égales, false sinon. /// public static bool operator ==(Inch a, Inch b) { return a.Equals(b); } /// /// Teste la non-égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont différentes, false sinon. /// public static bool operator !=(Inch a, Inch b) { return !(a == b); } /// /// Teste si la première longueur est inférieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure à la deuxième, false sinon. /// public static bool operator <(Inch a, Inch b) { return a.CompareTo(b) < 0; } /// /// Teste si la première longueur est supérieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure à la deuxième, false sinon. /// public static bool operator >(Inch a, Inch b) { return a.CompareTo(b) > 0; } /// /// Teste si la première longueur est inférieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Inch a, Inch b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première longueur est supérieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Inch a, Inch b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// La somme des deux longueurs. /// public static Inch operator +(Inch a, Inch b) { return new Inch(a.Value + b.Value); } /// /// Soustrait la deuxième longueur de la première /// /// Première longueur /// Deuxième longueur /// /// La différence entre les deux longueurs. /// public static Inch operator -(Inch a, Inch b) { return new Inch(a.Value - b.Value); } /// /// Multiplie une longueur par un nombre. /// /// Longueur /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Inch operator *(Inch length, double multiplier) { return new Inch(length.Value*multiplier); } /// /// Divise une longueur par un nombre. /// /// Longueur /// Diviseur /// /// Le résultat de la division. /// public static Inch operator /(Inch length, double divisor) { return new Inch(length.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(Inch 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} in", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Longueur. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Inch length) { var regex = new Regex(@"(?.*) ?in"); 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)) { length = new Inch(value); return true; } } length = new Inch(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(Inch 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 Inch) return Equals((Inch) 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 ILength /// /// Obtient la valeur de cette longueur en mètres /// double ILength.ValueInMeters { get { return _value * .0254; } } #endregion } /// /// Représente une longueur en miles /// public struct Mile : ILength, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette longueur en miles. public Mile(double value) { _value = value; } /// /// Obtient la valeur de cette longueur. /// /// /// La valeur de cette longueur en miles /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en miles. /// /// Résultat de la conversion. /// public static implicit operator Mile(double value) { return new Mile(value); } /// /// Effectue une conversion explicite de vers . /// /// Longueur /// /// Résultat de la conversion. /// public static explicit operator double(Mile length) { return length.Value; } /// /// Teste l'égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont égales, false sinon. /// public static bool operator ==(Mile a, Mile b) { return a.Equals(b); } /// /// Teste la non-égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont différentes, false sinon. /// public static bool operator !=(Mile a, Mile b) { return !(a == b); } /// /// Teste si la première longueur est inférieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure à la deuxième, false sinon. /// public static bool operator <(Mile a, Mile b) { return a.CompareTo(b) < 0; } /// /// Teste si la première longueur est supérieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure à la deuxième, false sinon. /// public static bool operator >(Mile a, Mile b) { return a.CompareTo(b) > 0; } /// /// Teste si la première longueur est inférieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Mile a, Mile b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première longueur est supérieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Mile a, Mile b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// La somme des deux longueurs. /// public static Mile operator +(Mile a, Mile b) { return new Mile(a.Value + b.Value); } /// /// Soustrait la deuxième longueur de la première /// /// Première longueur /// Deuxième longueur /// /// La différence entre les deux longueurs. /// public static Mile operator -(Mile a, Mile b) { return new Mile(a.Value - b.Value); } /// /// Multiplie une longueur par un nombre. /// /// Longueur /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Mile operator *(Mile length, double multiplier) { return new Mile(length.Value*multiplier); } /// /// Divise une longueur par un nombre. /// /// Longueur /// Diviseur /// /// Le résultat de la division. /// public static Mile operator /(Mile length, double divisor) { return new Mile(length.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(Mile 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} mi", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Longueur. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Mile length) { var regex = new Regex(@"(?.*) ?mi"); 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)) { length = new Mile(value); return true; } } length = new Mile(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(Mile 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 Mile) return Equals((Mile) 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 ILength /// /// Obtient la valeur de cette longueur en mètres /// double ILength.ValueInMeters { get { return _value * 1609.344; } } #endregion } /// /// Représente une longueur en milles marins /// public struct NauticalMile : ILength, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette longueur en milles marins. public NauticalMile(double value) { _value = value; } /// /// Obtient la valeur de cette longueur. /// /// /// La valeur de cette longueur en milles marins /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en milles marins. /// /// Résultat de la conversion. /// public static implicit operator NauticalMile(double value) { return new NauticalMile(value); } /// /// Effectue une conversion explicite de vers . /// /// Longueur /// /// Résultat de la conversion. /// public static explicit operator double(NauticalMile length) { return length.Value; } /// /// Teste l'égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont égales, false sinon. /// public static bool operator ==(NauticalMile a, NauticalMile b) { return a.Equals(b); } /// /// Teste la non-égalité de deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// true si les deux longueurs sont différentes, false sinon. /// public static bool operator !=(NauticalMile a, NauticalMile b) { return !(a == b); } /// /// Teste si la première longueur est inférieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure à la deuxième, false sinon. /// public static bool operator <(NauticalMile a, NauticalMile b) { return a.CompareTo(b) < 0; } /// /// Teste si la première longueur est supérieure à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure à la deuxième, false sinon. /// public static bool operator >(NauticalMile a, NauticalMile b) { return a.CompareTo(b) > 0; } /// /// Teste si la première longueur est inférieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(NauticalMile a, NauticalMile b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première longueur est supérieure ou égale à la deuxième. /// /// Première longueur /// Deuxième longueur /// /// true si la première longueur est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(NauticalMile a, NauticalMile b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux longueurs. /// /// Première longueur /// Deuxième longueur /// /// La somme des deux longueurs. /// public static NauticalMile operator +(NauticalMile a, NauticalMile b) { return new NauticalMile(a.Value + b.Value); } /// /// Soustrait la deuxième longueur de la première /// /// Première longueur /// Deuxième longueur /// /// La différence entre les deux longueurs. /// public static NauticalMile operator -(NauticalMile a, NauticalMile b) { return new NauticalMile(a.Value - b.Value); } /// /// Multiplie une longueur par un nombre. /// /// Longueur /// Multiplicateur /// /// Le résultat de la multiplication. /// public static NauticalMile operator *(NauticalMile length, double multiplier) { return new NauticalMile(length.Value*multiplier); } /// /// Divise une longueur par un nombre. /// /// Longueur /// Diviseur /// /// Le résultat de la division. /// public static NauticalMile operator /(NauticalMile length, double divisor) { return new NauticalMile(length.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(NauticalMile 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} NM", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Longueur. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out NauticalMile length) { var regex = new Regex(@"(?.*) ?NM"); 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)) { length = new NauticalMile(value); return true; } } length = new NauticalMile(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(NauticalMile 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 NauticalMile) return Equals((NauticalMile) 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 ILength /// /// Obtient la valeur de cette longueur en mètres /// double ILength.ValueInMeters { get { return _value * 1852; } } #endregion } /// /// Fournit des méthodes d'extension pour les longueurs /// public static class LengthExtensions { /// /// Convertit une longueur en mètres /// /// Le type de l'unité d'origine /// Longueur à convertir /// Valeur en mètres public static Meter ToMeter(this T length) where T : ILength { return length.ValueInMeters; } /// /// Convertit une longueur en pieds /// /// Le type de l'unité d'origine /// Longueur à convertir /// Valeur en pieds public static Foot ToFoot(this T length) where T : ILength { return length.ValueInMeters / .3048; } /// /// Convertit une longueur en pouces /// /// Le type de l'unité d'origine /// Longueur à convertir /// Valeur en pouces public static Inch ToInch(this T length) where T : ILength { return length.ValueInMeters / .0254; } /// /// Convertit une longueur en miles /// /// Le type de l'unité d'origine /// Longueur à convertir /// Valeur en miles public static Mile ToMile(this T length) where T : ILength { return length.ValueInMeters / 1609.344; } /// /// Convertit une longueur en milles marins /// /// Le type de l'unité d'origine /// Longueur à convertir /// Valeur en milles marins public static NauticalMile ToNauticalMile(this T length) where T : ILength { return length.ValueInMeters / 1852; } } }