同じクラスで同じ型の2つの演算子(明示的および暗黙的)を共存できないのはなぜですか?私が次のものを持っているとしましょう:
public class Fahrenheit
{
public float Degrees { get; set; }
public Fahrenheit(float degrees)
{
Degrees = degrees;
}
public static explicit operator Celsius(Fahrenheit f)
{
return new Celsius(ToCelsius(f.Degrees));
}
public static implicit operator Celsius(Fahrenheit f)
{
return new Celsius(ToCelsius(f.Degrees));
}
}
public class Celsius {
public float Degrees { get; set; }
public Celsius(float degrees)
{
Degrees = degrees;
}
}
したがって、次の2つの方法のいずれかを使用する可能性をクライアントに与えることができます。
Fahrenheit f = new Fahrenheit(20);
Celsius c1 = (Celsius)f;
Celsius c2 = f;
これが許可されない特別な理由はありますか、それともプログラマーの誤用を避けるための単なる慣習ですか?