2013-01-18 120 views
-1

我正在寫一個簡單的程序,其中我定義了一個接受某種類型的參數的函數,現在我得到的新要求與我已經在早期函數中編寫過的程序相同,但這次它應該不同類型的參數。我不能直接調用兩個不同類型參數的相同函數。所以我的問題是我應該如何修改我的功能以這種方式行事。我希望這是可能的。我想要的東西,我現在有Sum(int 1,int j)功能,現在我想使用double類型參數相同的功能。函數定義在不同類型的參數的情況下?

+0

閱讀過載; http://msdn.microsoft.com/en-gb/library/vstudio/ms229029(v=vs.100).aspx –

回答

2

這稱爲超載。你可以做的是簡單地寫了兩個功能:

public double Sum(int 1, int j) 

public double Sum(double 1, double j) 

而且你的程序將調用根據您傳遞給它的參數的適當的一個。

1

您聲明瞭一個具有相同參數但不同類型的新方法。

public Int32 Sum(Int32 i, Int32 j) 
{ 
    return i + j; 
} 

public Double Sum(Double i, Double j) 
{ 
    return i + j; 
} 
2

簡單的泛型

T Sum<T>(T i,T j) { ... } 

但是,您將無法做i+j或任何東西,所以它依賴。

+0

以及如何總結'T'? – sll

+1

那麼,你的最後一句話使這個建議可能對此目的很沒用:) – Joey

+0

@Joey true,但總的來說,如果你可以限制'T',那麼它是一個非常好的替代方案,所以可能值得一提 – psubsee2003

1

在.NET中沒有包含不同數字類型的類型。所以你需要兩個同樣方法的重載,一個取參數int,一個取參數double

0

您可以針對不同的數據類型編寫通用方法。 檢查此Link 查看更多此鏈接。它顯示瞭如何創建一個可以處理多個數據類型的函數。

2

爲什麼不定義一個double作爲參數類型的方法,以後也可以調用它作爲整數值。

private double Sum(double a, double b) 
{ 
    return a+b; 
} 

,以後你可以這樣調用它:

int a = 1; 
int b = 2; 
int Sum = (int) Sum(a,b); 

由於整數可以傳遞給double類型的參數。但是如果你的方法涉及複雜的計算,那麼你最好用不同類型的Sum方法的多個重載。

+0

我認爲這是迄今爲止最完整的答案。大多數數字類型都隱式地轉換爲double,所以接受double的方法(加上也許是一個接受小數的重載)也可以接受所有其他類型,但是這種方法會打開您的代碼,使其對浮點精度的細微問題和不那麼細微的問題操作。 –

0
int a = 2, b = 3; 
     double c = 2.345, d = 3.45; 
     object inta = a, intb = b; 
     object doublec = c, doubled = d; 
     Console.WriteLine(Sum(inta, intb).ToString()); 
     Console.WriteLine(Sum(doublec, doubled).ToString()); 

public object Sum(object a, object b) 
    { 
     object sum = null; 
     if (a.GetType().ToString() == "System.Int32" && b.GetType().ToString() == "System.Int32") 
     { 
      sum = Convert.ToInt32(a.ToString()) + Convert.ToInt32(b.ToString()); 
     } 

     if (a.GetType().ToString() == "System.Double" && b.GetType().ToString() == "System.Double") 
     { 
      sum = Convert.ToDouble(a.ToString()) + Convert.ToDouble(b.ToString()); 
     } 
     return sum; 

    } 
+0

在其他問題上查看一些過去的答案,我認爲您應該嘗試包含一些關於您的代碼的更多解釋。你有幾個答案,你只是粘貼代碼而沒有描述它正在做什麼或者爲什麼它解決了這個問題。 SO的想法不僅僅是提供解決方案,而是回答問題併成爲這些問題和答案的存儲庫。 – psubsee2003

+0

當然,我會改善我的回答.... – Pandian

相關問題