// 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 température /// public interface ITemperature { /// /// Obtient la valeur de cette température en kelvins /// double ValueInKelvins { get; } } /// /// Représente une température en kelvins /// public struct Kelvin : ITemperature, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette température en kelvins public Kelvin(double value) { _value = value; } /// /// Obtient la valeur de cette température. /// /// /// La valeur de cette température en kelvins /// public double Value { get { return _value; } } /// /// Renvoie le zero absolu. /// public Kelvin AbsoluteZero { get { return new Kelvin(0); } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en kelvins. /// /// Résultat de la conversion. /// public static implicit operator Kelvin(double value) { return new Kelvin(value); } /// /// Effectue une conversion explicite de vers . /// /// Temperature /// /// Résultat de la conversion. /// public static explicit operator double(Kelvin temperature) { return temperature.Value; } /// /// Teste l'égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont égales, false sinon. /// public static bool operator ==(Kelvin a, Kelvin b) { return a.Equals(b); } /// /// Teste la non-égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont différentes, false sinon. /// public static bool operator !=(Kelvin a, Kelvin b) { return !(a == b); } /// /// Teste si la première température est inférieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure à la deuxième, false sinon. /// public static bool operator <(Kelvin a, Kelvin b) { return a.CompareTo(b) < 0; } /// /// Teste si la première température est supérieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure à la deuxième, false sinon. /// public static bool operator >(Kelvin a, Kelvin b) { return a.CompareTo(b) > 0; } /// /// Teste si la première température est inférieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Kelvin a, Kelvin b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première température est supérieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Kelvin a, Kelvin b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux températures. /// /// Première température /// Deuxième température /// /// La somme des deux températures. /// public static Kelvin operator +(Kelvin a, Kelvin b) { return new Kelvin(a.Value + b.Value); } /// /// Soustrait la deuxième température de la première /// /// Première température /// Deuxième température /// /// La différence entre les deux températures. /// public static Kelvin operator -(Kelvin a, Kelvin b) { return new Kelvin(a.Value - b.Value); } /// /// Multiplie une température par un nombre. /// /// Température /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Kelvin operator *(Kelvin temperature, double multiplier) { return new Kelvin(temperature.Value*multiplier); } /// /// Divise une température par un nombre. /// /// Température /// Diviseur /// /// Le résultat de la division. /// public static Kelvin operator /(Kelvin temperature, double divisor) { return new Kelvin(temperature.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(Kelvin 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} K", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Temperature. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Kelvin temperature) { var regex = new Regex(@"(?.*) ?K"); 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)) { temperature = new Kelvin(value); return true; } } temperature = new Kelvin(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(Kelvin 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 Kelvin) return Equals((Kelvin) 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 ITemperature /// /// Obtient la valeur de cette température en kelvins /// double ITemperature.ValueInKelvins { get { return _value; } } #endregion } /// /// Représente une température en degrés Celsius /// public struct Celsius : ITemperature, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette température en degrés Celsius public Celsius(double value) { _value = value; } /// /// Obtient la valeur de cette température. /// /// /// La valeur de cette température en degrés Celsius /// public double Value { get { return _value; } } /// /// Renvoie le zero absolu. /// public Celsius AbsoluteZero { get { return new Celsius(-273.15); } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en degrés Celsius. /// /// Résultat de la conversion. /// public static implicit operator Celsius(double value) { return new Celsius(value); } /// /// Effectue une conversion explicite de vers . /// /// Temperature /// /// Résultat de la conversion. /// public static explicit operator double(Celsius temperature) { return temperature.Value; } /// /// Teste l'égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont égales, false sinon. /// public static bool operator ==(Celsius a, Celsius b) { return a.Equals(b); } /// /// Teste la non-égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont différentes, false sinon. /// public static bool operator !=(Celsius a, Celsius b) { return !(a == b); } /// /// Teste si la première température est inférieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure à la deuxième, false sinon. /// public static bool operator <(Celsius a, Celsius b) { return a.CompareTo(b) < 0; } /// /// Teste si la première température est supérieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure à la deuxième, false sinon. /// public static bool operator >(Celsius a, Celsius b) { return a.CompareTo(b) > 0; } /// /// Teste si la première température est inférieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Celsius a, Celsius b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première température est supérieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Celsius a, Celsius b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux températures. /// /// Première température /// Deuxième température /// /// La somme des deux températures. /// public static Celsius operator +(Celsius a, Celsius b) { return new Celsius(a.Value + b.Value); } /// /// Soustrait la deuxième température de la première /// /// Première température /// Deuxième température /// /// La différence entre les deux températures. /// public static Celsius operator -(Celsius a, Celsius b) { return new Celsius(a.Value - b.Value); } /// /// Multiplie une température par un nombre. /// /// Température /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Celsius operator *(Celsius temperature, double multiplier) { return new Celsius(temperature.Value*multiplier); } /// /// Divise une température par un nombre. /// /// Température /// Diviseur /// /// Le résultat de la division. /// public static Celsius operator /(Celsius temperature, double divisor) { return new Celsius(temperature.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(Celsius 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} °C", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Temperature. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Celsius temperature) { var regex = new Regex(@"(?.*) ?°C"); 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)) { temperature = new Celsius(value); return true; } } temperature = new Celsius(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(Celsius 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 Celsius) return Equals((Celsius) 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 ITemperature /// /// Obtient la valeur de cette température en kelvins /// double ITemperature.ValueInKelvins { get { return _value + 273.15; } } #endregion } /// /// Représente une température en degrés Fahrenheit /// public struct Fahrenheit : ITemperature, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cette température en degrés Fahrenheit public Fahrenheit(double value) { _value = value; } /// /// Obtient la valeur de cette température. /// /// /// La valeur de cette température en degrés Fahrenheit /// public double Value { get { return _value; } } /// /// Renvoie le zero absolu. /// public Fahrenheit AbsoluteZero { get { return new Fahrenheit(-459.67); } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en degrés Fahrenheit. /// /// Résultat de la conversion. /// public static implicit operator Fahrenheit(double value) { return new Fahrenheit(value); } /// /// Effectue une conversion explicite de vers . /// /// Temperature /// /// Résultat de la conversion. /// public static explicit operator double(Fahrenheit temperature) { return temperature.Value; } /// /// Teste l'égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont égales, false sinon. /// public static bool operator ==(Fahrenheit a, Fahrenheit b) { return a.Equals(b); } /// /// Teste la non-égalité de deux températures. /// /// Première température /// Deuxième température /// /// true si les deux températures sont différentes, false sinon. /// public static bool operator !=(Fahrenheit a, Fahrenheit b) { return !(a == b); } /// /// Teste si la première température est inférieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure à la deuxième, false sinon. /// public static bool operator <(Fahrenheit a, Fahrenheit b) { return a.CompareTo(b) < 0; } /// /// Teste si la première température est supérieure à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure à la deuxième, false sinon. /// public static bool operator >(Fahrenheit a, Fahrenheit b) { return a.CompareTo(b) > 0; } /// /// Teste si la première température est inférieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est inférieure ou égale à la deuxième, false sinon. /// public static bool operator <=(Fahrenheit a, Fahrenheit b) { return a.CompareTo(b) <= 0; } /// /// Teste si la première température est supérieure ou égale à la deuxième. /// /// Première température /// Deuxième température /// /// true si la première température est supérieure ou égale à la deuxième, false sinon. /// public static bool operator >=(Fahrenheit a, Fahrenheit b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux températures. /// /// Première température /// Deuxième température /// /// La somme des deux températures. /// public static Fahrenheit operator +(Fahrenheit a, Fahrenheit b) { return new Fahrenheit(a.Value + b.Value); } /// /// Soustrait la deuxième température de la première /// /// Première température /// Deuxième température /// /// La différence entre les deux températures. /// public static Fahrenheit operator -(Fahrenheit a, Fahrenheit b) { return new Fahrenheit(a.Value - b.Value); } /// /// Multiplie une température par un nombre. /// /// Température /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Fahrenheit operator *(Fahrenheit temperature, double multiplier) { return new Fahrenheit(temperature.Value*multiplier); } /// /// Divise une température par un nombre. /// /// Température /// Diviseur /// /// Le résultat de la division. /// public static Fahrenheit operator /(Fahrenheit temperature, double divisor) { return new Fahrenheit(temperature.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(Fahrenheit 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} °F", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Temperature. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Fahrenheit temperature) { var regex = new Regex(@"(?.*) ?°F"); 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)) { temperature = new Fahrenheit(value); return true; } } temperature = new Fahrenheit(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(Fahrenheit 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 Fahrenheit) return Equals((Fahrenheit) 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 ITemperature /// /// Obtient la valeur de cette température en kelvins /// double ITemperature.ValueInKelvins { get { return (_value + 459.67) / 1.8; } } #endregion } /// /// Fournit des méthodes d'extension pour les températures /// public static class TemperatureExtensions { /// /// Convertit une température en kelvins /// /// Le type de l'unité d'origine /// Température à convertir /// Valeur en kelvins public static Kelvin ToKelvin(this T temperature) where T : ITemperature { return temperature.ValueInKelvins; } /// /// Convertit une température en degrés Celsius /// /// Le type de l'unité d'origine /// Température à convertir /// Valeur en degrés Celsius public static Celsius ToCelsius(this T temperature) where T : ITemperature { return temperature.ValueInKelvins - 273.15; } /// /// Convertit une température en degrés Fahrenheit /// /// Le type de l'unité d'origine /// Température à convertir /// Valeur en degrés Fahrenheit public static Fahrenheit ToFahrenheit(this T temperature) where T : ITemperature { return (temperature.ValueInKelvins * 1.8) - 459.67; } } }