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

}

変換方法を正確にどこに置くか、私は混乱しています。

1つのメソッドを一方のクラスに配置し、もう一方をもう一方のクラスに配置したり、それらを交換したり、両方を2つのクラスのいずれかに配置したりしても、正常に機能します。

しかし、これら2つのクラスの外に置くと、機能しません(コンパイルエラー)。

誰かがこれに光を当ててください。

編集:

変換メソッドをいずれかのクラスに含めることができる場合、変換メソッドを別のクラスに含めることができないのはなぜですか?

4

2 に答える 2

2

重要なのは、暗黙の変換が2つのクラスのいずれかに存在することです。私は両方の変換をあまり一般的に使用されないクラスに入れる傾向があります。

この場合、クラスは同じように見えるので、各クラスのクラスに変換ます。つまり、FからCへの変換は摂氏クラスになり、その逆も同様です。

本当に、それは主に個人的な好みについてです。

この特定のケースでは、C、F、K、Rなどの温度を取得できるTemperatureクラスを作成します。しかし、それは実際の質問とは正確には関係ありません。

于 2012-05-14T17:14:34.427 に答える
-1

私はそれらを各クラスに入れます。したがって、次のようなことができます。

Celsius c = new Celsius(Value);
Fahrenheit f = c.toFahrenheit();
Celsius newC = f.toCelsius();

編集:またはヘルパークラスのルートに行きたい場合は、次のようにできます:

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 に答える