// 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 surface /// public interface IArea { /// /// Obtient la valeur de cette longueur en mètres carrés /// double ValueInSquareMeters { get; } } /// /// Représente une surface en mètres carrés /// public struct SquareMeter : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en mètres carrés public SquareMeter(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en mètres carrés. /// /// Résultat de la conversion. /// public static implicit operator SquareMeter(double value) { return new SquareMeter(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(SquareMeter area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(SquareMeter a, SquareMeter b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(SquareMeter a, SquareMeter b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(SquareMeter a, SquareMeter b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(SquareMeter a, SquareMeter b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(SquareMeter a, SquareMeter b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(SquareMeter a, SquareMeter b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static SquareMeter operator +(SquareMeter a, SquareMeter b) { return new SquareMeter(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static SquareMeter operator -(SquareMeter a, SquareMeter b) { return new SquareMeter(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static SquareMeter operator *(SquareMeter area, double multiplier) { return new SquareMeter(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static SquareMeter operator /(SquareMeter area, double divisor) { return new SquareMeter(area.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(SquareMeter 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. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out SquareMeter area) { 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)) { area = new SquareMeter(value); return true; } } area = new SquareMeter(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(SquareMeter 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 SquareMeter) return Equals((SquareMeter) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value; } } #endregion } /// /// Représente une surface en pieds carrés /// public struct SquareFoot : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en pieds carrés public SquareFoot(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en pieds carrés. /// /// Résultat de la conversion. /// public static implicit operator SquareFoot(double value) { return new SquareFoot(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(SquareFoot area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(SquareFoot a, SquareFoot b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(SquareFoot a, SquareFoot b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(SquareFoot a, SquareFoot b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(SquareFoot a, SquareFoot b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(SquareFoot a, SquareFoot b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(SquareFoot a, SquareFoot b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static SquareFoot operator +(SquareFoot a, SquareFoot b) { return new SquareFoot(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static SquareFoot operator -(SquareFoot a, SquareFoot b) { return new SquareFoot(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static SquareFoot operator *(SquareFoot area, double multiplier) { return new SquareFoot(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static SquareFoot operator /(SquareFoot area, double divisor) { return new SquareFoot(area.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(SquareFoot 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} sq ft", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out SquareFoot area) { var regex = new Regex(@"(?.*) ?sq 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)) { area = new SquareFoot(value); return true; } } area = new SquareFoot(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(SquareFoot 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 SquareFoot) return Equals((SquareFoot) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value * .09290304; } } #endregion } /// /// Représente une surface en pouces carrés /// public struct SquareInch : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en pouces carrés public SquareInch(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en pouces carrés. /// /// Résultat de la conversion. /// public static implicit operator SquareInch(double value) { return new SquareInch(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(SquareInch area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(SquareInch a, SquareInch b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(SquareInch a, SquareInch b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(SquareInch a, SquareInch b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(SquareInch a, SquareInch b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(SquareInch a, SquareInch b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(SquareInch a, SquareInch b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static SquareInch operator +(SquareInch a, SquareInch b) { return new SquareInch(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static SquareInch operator -(SquareInch a, SquareInch b) { return new SquareInch(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static SquareInch operator *(SquareInch area, double multiplier) { return new SquareInch(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static SquareInch operator /(SquareInch area, double divisor) { return new SquareInch(area.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(SquareInch 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} sq in", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out SquareInch area) { var regex = new Regex(@"(?.*) ?sq 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)) { area = new SquareInch(value); return true; } } area = new SquareInch(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(SquareInch 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 SquareInch) return Equals((SquareInch) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value * .00064516; } } #endregion } /// /// Représente une surface en acres /// public struct Acre : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en acres public Acre(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en acres. /// /// Résultat de la conversion. /// public static implicit operator Acre(double value) { return new Acre(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(Acre area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(Acre a, Acre b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(Acre a, Acre b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(Acre a, Acre b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(Acre a, Acre b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Acre a, Acre b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Acre a, Acre b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static Acre operator +(Acre a, Acre b) { return new Acre(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static Acre operator -(Acre a, Acre b) { return new Acre(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Acre operator *(Acre area, double multiplier) { return new Acre(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static Acre operator /(Acre area, double divisor) { return new Acre(area.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(Acre 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} ac", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Acre area) { var regex = new Regex(@"(?.*) ?ac"); 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)) { area = new Acre(value); return true; } } area = new Acre(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(Acre 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 Acre) return Equals((Acre) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value * 4046.8564224; } } #endregion } /// /// Représente une surface en ares /// public struct Are : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en ares public Are(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en ares. /// /// Résultat de la conversion. /// public static implicit operator Are(double value) { return new Are(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(Are area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(Are a, Are b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(Are a, Are b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(Are a, Are b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(Are a, Are b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Are a, Are b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Are a, Are b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static Are operator +(Are a, Are b) { return new Are(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static Are operator -(Are a, Are b) { return new Are(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Are operator *(Are area, double multiplier) { return new Are(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static Are operator /(Are area, double divisor) { return new Are(area.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(Are 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} a", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Are area) { var regex = new Regex(@"(?.*) ?a"); 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)) { area = new Are(value); return true; } } area = new Are(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(Are 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 Are) return Equals((Are) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value * 100; } } #endregion } /// /// Représente une surface en hectares /// public struct Hectare : IArea, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette surface en hectares public Hectare(double value) { _value = value; } /// /// Obtient la valeur ce cette surface. /// /// /// La valeur de cette surface /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en hectares. /// /// Résultat de la conversion. /// public static implicit operator Hectare(double value) { return new Hectare(value); } /// /// Effectue une conversion explicite de vers . /// /// Surface /// /// Résultat de la conversion. /// public static explicit operator double(Hectare area) { return area.Value; } /// /// Teste l'égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont égales, false sinon. /// public static bool operator ==(Hectare a, Hectare b) { return a.Equals(b); } /// /// Teste la non-égalité de deux surfaces. /// /// Première surface /// Deuxième surface /// /// true si les deux surfaces sont différentes, false sinon. /// public static bool operator !=(Hectare a, Hectare b) { return !(a == b); } /// /// Teste si la première surface est inférieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure à la deuxième, false sinon. /// public static bool operator <(Hectare a, Hectare b) { return a.CompareTo(b) < 0; } /// /// Teste si la première surface est supérieure à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure à la deuxième, false sinon. /// public static bool operator >(Hectare a, Hectare b) { return a.CompareTo(b) > 0; } /// /// Teste si la première surface est inférieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Hectare a, Hectare b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première surface est supérieure ou égale à la deuxième. /// /// Première surface /// Deuxième surface /// /// true si la première surface est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Hectare a, Hectare b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux surfaces. /// /// Première surface /// Deuxième surface /// /// La somme des deux surfaces. /// public static Hectare operator +(Hectare a, Hectare b) { return new Hectare(a.Value + b.Value); } /// /// Soustrait la deuxième surface de la première /// /// Première surface /// Deuxième surface /// /// La différence entre les deux surfaces. /// public static Hectare operator -(Hectare a, Hectare b) { return new Hectare(a.Value - b.Value); } /// /// Multiplie une surface par un nombre. /// /// surface /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Hectare operator *(Hectare area, double multiplier) { return new Hectare(area.Value*multiplier); } /// /// Divise une surface par un nombre. /// /// surface /// Diviseur /// /// Le résultat de la division. /// public static Hectare operator /(Hectare area, double divisor) { return new Hectare(area.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(Hectare 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} ha", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Surface. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Hectare area) { var regex = new Regex(@"(?.*) ?ha"); 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)) { area = new Hectare(value); return true; } } area = new Hectare(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(Hectare 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 Hectare) return Equals((Hectare) 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 IArea /// /// Obtient la valeur de cette surface en mètres carrés /// double IArea.ValueInSquareMeters { get { return _value * 10000; } } #endregion } /// /// Fournit des méthodes d'extension pour les surfaces /// public static class AreaExtensions { /// /// Convertit une surface en mètres carrés /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en mètres carrés public static SquareMeter ToSquareMeter(this T area) where T : IArea { return area.ValueInSquareMeters; } /// /// Convertit une surface en pieds carrés /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en pieds carrés public static SquareFoot ToSquareFoot(this T area) where T : IArea { return area.ValueInSquareMeters / .09290304; } /// /// Convertit une surface en pouces carrés /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en pouces carrés public static SquareInch ToSquareInch(this T area) where T : IArea { return area.ValueInSquareMeters / .00064516; } /// /// Convertit une surface en acres /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en acres public static Acre ToAcre(this T area) where T : IArea { return area.ValueInSquareMeters / 4046.8564224; } /// /// Convertit une surface en ares /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en ares public static Are ToAre(this T area) where T : IArea { return area.ValueInSquareMeters / 100; } /// /// Convertit une surface en hectares /// /// Le type de l'unité d'origine /// Surface à convertir /// Valeur en hectares public static Hectare ToHectare(this T area) where T : IArea { return area.ValueInSquareMeters / 10000; } } }