public class Faranheit
{
public float Digree { get; set; }
public Faranheit(float f)
{
Digree = f;
}
public static implicit operator Celcius(Faranheit f)
{
return new Celcius((5.0f / 9.0f) * (f.Digree - 32));
}
public static implicit operator Faranheit(Celcius c)
{
return new Faranheit((9.0f / 5.0f) * c.Digree + 32);
}
}
public class Celcius
{
public float Digree{get;set;}
public Celcius(float c)
{
Digree = c;
}
}
我很困惑,在哪里准确地放置转换方法..
即使我将一个方法放在一个类中而另一个方法放在另一个类中,或者我交换它们,或者即使我将它们都放在两个类中的任何一个中,它也能正常工作。
但如果我把它放在这两个类之外它就不起作用(编译错误)..
可以请有人对此有所启发..
修改
如果它允许转换方法在任何一个类中,为什么它不允许转换方法在一个单独的类中?
答案 0 :(得分:2)
重要的是隐式转换存在于两个类中的一个中。我倾向于将两种转换都放在不太常用的类中。
在这种情况下,类看起来相同,所以我将转换转换为每个类中的类,即从F到C的转换将在Celsius类中进行,反之亦然。 / p>
真的,这主要是关于个人偏好。
在这种特殊情况下,我会写一个温度等级,让你得到C,F,K,R等温度。但这与实际问题并不完全相关。
答案 1 :(得分:-1)
我会将它们放在每个类中。所以你可以这样做:
Celsius c = new Celsius(Value);
Fahrenheit f = c.toFahrenheit();
Celsius newC = f.toCelsius();
编辑:或者如果你想去Helper类路线,你可以这样做:
public static class ConvertTemps
{
public static Celsius toCelsius(Fahrenheit F)
{
return new Celsius(5/8* F - 32);
}
public static Fahrenheit toFahrenheit(Celsius C)
{
return new Fahrenheit(8/5*C + 32);
}
}
然后你可以做以下事情:
Celsius c = new Celsius(value);
Fahrenheit f = ConvertTemps.toFahrenheit(c);
但我会走第一条路。