在哪里放置完全隐式的转换方法

时间:2012-05-14 17:03:42

标签: c# type-conversion implicit-conversion user-defined-types

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

}

我很困惑,在哪里准确地放置转换方法..

即使我将一个方法放在一个类中而另一个方法放在另一个类中,或者我交换它们,或者即使我将它们都放在两个类中的任何一个中,它也能正常工作。

但如果我把它放在这两个类之外它就不起作用(编译错误)..

可以请有人对此有所启发..

修改

如果它允许转换方法在任何一个类中,为什么它不允许转换方法在一个单独的类中?

2 个答案:

答案 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);

但我会走第一条路。