2014-09-02 34 views
0

什麼類型的操作符可用於對象類?爲什麼我不能在類型對象中使用「+」或者什麼類型的操作符可以與對象一起使用

public static void testing() 
{ 
    object test = 10; 
    object x = "a"; 
    object result = test + x;//compiler error 
} 

爲什麼我不能用對象類型使用+

+0

因爲不是每一個對象都可以添加到別的東西。 「對象」是所有其他類的基類,這意味着所有類都共享它的屬性和方法。 – 2014-09-02 10:57:08

+1

你需要定義運算符+對象(http://msdn.microsoft.com/en-US/library/8edha89s.aspx),但我不會推薦它用於比對象 – 2014-09-02 10:58:05

+0

thanx.then有什麼可用的運算符用於對象類型 – 2014-09-02 10:59:19

回答

6

默認情況下,並非每個對象都支持+,-或其他類型的運算符。想象以下類:

public class Weight 
{ 
    public int Value {get;set;} 
} 

而下列情況(以計算例如組合重量):

var w1 = new Weight { Value = 1 }; 
var w2 = new Weight { Value = 2 }; 

否則以下將導致一個編譯器錯誤:

var result = w1 + w2; 

錯誤將看起來像:

Operator '+' cannot be applied to operands of type 'Weight' and 'Weight'

你必須重載+運營商這樣的:

public class Weight 
{ 
    public int Value {get;set;} 

    public static Weight operator +(Weight w1, Weight w2) 
    { 
     return new Weight { Value = w1.Value + w2.Value }; 
    } 
} 

現在你可以這樣做:

var result = w1 + w2; 
Console.WriteLine(result.Value); //Writes: 3 

規則同樣適用於-操作:

public static Weight operator -(Weight w1, Weight w2) 
{ 
    return new Weight { Value = w1.Value - w2.Value }; 
} 

延伸閱讀:

+0

thanx阿巴斯for ur回覆,只是告訴我有一些默認的opertors以外的重載與對象類型use.please回覆,即使你覺得它很愚蠢的問題 – 2014-09-02 11:17:43

+0

就像我說的,'對象'不支持這些默認的操作符,你必須超載他們創建課程時。 – Abbas 2014-09-02 11:24:43

+0

再次感謝...對我來說,感覺很奇怪,對象類沒有簡單的操作符。只有一些方法和構造函數,它有...它是所有其他類型的父親 – 2014-09-02 11:29:47

相關問題