// 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;
}
}
}