1

我試圖做到這一點:凡超載師返回自定義的類C#運營商/(INT,INT)

/// <summary> 
/// Syntax support for assigning a new Rational from "x/y" notation. 
/// </summary> 
/// <param name="num">Numerator, appears before the '/'</param> 
/// <param name="denom">Denominator, appears after the '/'</param> 
/// <returns>A new Rational using the num/denom convention</returns> 
public static Rational operator/(int num,int denom) 
{ 
    Rational r; 
    try 
    { 
     r = new Rational(num, denom); 
    } 
    catch (Exception e) 
    { 

     throw e; 
    } 
    return r; 
} 

但是當我把它作爲我的課的一部分,我得到一個錯誤,因爲一個的爭論必須是包含類。我注意到,如果我在我的測試程序中將它聲明在main()之外,這很好用,但是我希望類文件包含所有內容,以便我可以將.cs文件移交給它。什麼是正確的方法來做到這一點?

香港專業教育學院還試圖

Class Rational 
{ 
    .... 
} 
public static Rational operator/(...) 
{ 
    ... 
} 

這不起作用,因爲編譯器期望接口,委託,......等等等等智能感知的關鍵字。

感謝您的幫助!

+0

@mikez感謝您的反饋,您應該將其作爲答案,以便我可以接受它。 – Andros

+0

好吧,我刪除了我的評論,並將其作爲答案。 –

回答

3

沒有辦法做到這一點。二元運算符重載的要求是,其中一個操作數是您聲明運算符的類型。您不能爲其他類型聲明運算符。您想要聲明的運營商實際上是爲int而設計的,該運營商已經有一個分部運營商。

¶ 7.3.2:

用戶定義的運算符聲明總是需要的參數中的至少一個是包含操作者聲明的類或結構類型的。因此,用戶定義的運算符不可能具有與預定義的運算符相同的簽名。