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

}

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

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

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

可以请有人对此有所了解..

编辑:

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

4

2 回答 2

2

重要的是隐式转换存在于两个类之一中。我倾向于将两种转换都放在不太常用的类中。

在这种情况下,类看起来是相等的,所以我将转换每个类中的类,即从 F 到 C 的转换将在摄氏度类中进行,反之亦然。

真的,这主要是关于个人喜好。

在这种特定情况下,我会编写一个温度类,让您获得 C、F、K、R 等的温度。但这与实际问题并不完全相关。

于 2012-05-14T17:14:34.427 回答
-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);

但我会走第一条路线。

于 2012-05-14T17:08:24.493 回答