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

} 

我只是困惑,放在哪裏轉換方法完全相同..哪兒隱式轉換方法來把

它正常工作,即使我把一個方法,一個類其他在另一方面,或者我交換他們,或者即使我把他們兩個在任何兩類..

但如果我把它放在這兩個類以外它不起作用(編譯錯誤)..

請能有人把一些光在這個..

編輯:

如果允許轉換方法,以在任之類的,爲什麼沒有讓轉換方法是在一個單獨的課堂?

+0

你收到了什麼編譯錯誤? – gabsferreira

+2

小調:這是「華氏」。和「學位」。 –

+2

...和「攝氏」 –

回答

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

但我會走第一條路線。

+2

使用隱式運算符,您不需要'toX'方法... –

+0

啊,我忽略了這一點。好點子。猜猜這是非常重要的一個。那麼,那麼,你肯定希望每個班級都有一個。 –

2

重要的是隱式轉換存在於兩個類中的一箇中。我傾向於將這兩種轉換放在不太常用的類中。

在這種情況下,這些類看起來是相同的,所以我會將轉換轉換爲這個類在每個類中,即從F到C的轉換將會在Celsius類中進行,反之亦然。

真的,它主要是關於個人偏好。

在這個特定的情況下,我會寫一個溫度類,讓你得到C,F,K,R等的溫度。但這與實際問題並不完全相關。

+0

我的問題實際上是,如果它允許轉換方法在任何一個類中,爲什麼它不允許轉換方法在一個單獨的類? – dotNETbeginner