我正在寫一個簡單的程序,其中我定義了一個接受某種類型的參數的函數,現在我得到的新要求與我已經在早期函數中編寫過的程序相同,但這次它應該不同類型的參數。我不能直接調用兩個不同類型參數的相同函數。所以我的問題是我應該如何修改我的功能以這種方式行事。我希望這是可能的。我想要的東西,我現在有Sum(int 1,int j)
功能,現在我想使用double
類型參數相同的功能。函數定義在不同類型的參數的情況下?
回答
這稱爲超載。你可以做的是簡單地寫了兩個功能:
public double Sum(int 1, int j)
public double Sum(double 1, double j)
而且你的程序將調用根據您傳遞給它的參數的適當的一個。
您聲明瞭一個具有相同參數但不同類型的新方法。
public Int32 Sum(Int32 i, Int32 j)
{
return i + j;
}
public Double Sum(Double i, Double j)
{
return i + j;
}
簡單的泛型
T Sum<T>(T i,T j) { ... }
但是,您將無法做i+j
或任何東西,所以它依賴。
以及如何總結'T'? – sll
那麼,你的最後一句話使這個建議可能對此目的很沒用:) – Joey
@Joey true,但總的來說,如果你可以限制'T',那麼它是一個非常好的替代方案,所以可能值得一提 – psubsee2003
在.NET中沒有包含不同數字類型的類型。所以你需要兩個同樣方法的重載,一個取參數int
,一個取參數double
。
所以你有需要int
參數
public int Sum(int val1,int val2)
{
return val1 + val2;
}
的方法現在需要的是採取doubles
的方法:如果你想有一個generic類,它支持所有的「數字」類型
public double Sum(double val1,double val2)
{
return val1 + val2;
}
你可以看看這裏:
http://www.codeproject.com/Articles/33617/Arithmetic-in-Generic-Classes-in-C
您可以針對不同的數據類型編寫通用方法。 檢查此Link 查看更多此鏈接。它顯示瞭如何創建一個可以處理多個數據類型的函數。
爲什麼不定義一個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方法的多個重載。
我認爲這是迄今爲止最完整的答案。大多數數字類型都隱式地轉換爲double,所以接受double的方法(加上也許是一個接受小數的重載)也可以接受所有其他類型,但是這種方法會打開您的代碼,使其對浮點精度的細微問題和不那麼細微的問題操作。 –
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;
}
在其他問題上查看一些過去的答案,我認爲您應該嘗試包含一些關於您的代碼的更多解釋。你有幾個答案,你只是粘貼代碼而沒有描述它正在做什麼或者爲什麼它解決了這個問題。 SO的想法不僅僅是提供解決方案,而是回答問題併成爲這些問題和答案的存儲庫。 – psubsee2003
當然,我會改善我的回答.... – Pandian
- 1. 在不給參數類型的情況下綁定一個函數
- 2. 在不調用函數的情況下爲自定義參數賦值函數
- 3. 默認情況下,函數參數是c#中的值類型
- 4. C++:如何在不定義的情況下聲明非函數?
- 5. 界泛型類型的情況下類參數
- 6. Scala的情況下類的構造函數與WrappedArray參數
- 7. C如何在不帶參數的情況下調用函數?
- 8. 如何調用在C#中定義的函數具有相同的參數,返回類型和相同的名稱,但與VB.NET項目不同的情況下
- 9. 如何在不同參數的情況下定義動作? - asp.net mvc4
- 10. 在不使用類的情況下隱藏OCaml中的函數參數
- 11. 是否可以在不指定類型的情況下傳遞表參數?
- 12. 爲函數im定義了不同的情況matlab(symfun)
- 13. 函數參數如何在不提及函數體的情況下使用?
- 14. 如何在不使用java參數的情況下訪問不同類的值?
- 15. 引用到函數類型函數類型:未定義參考
- 16. 定義php函數並在沒有()的情況下使用
- 17. 在不指定類型參數的情況下在泛型類的成員上使用nameof
- 18. 在不參考對象的情況下調用一個函數
- 19. 使用預定義的陣列的情況下塊參數
- 20. 如何定義子類中參數不同的虛函數?
- 21. 「Puts()」函數如何在沒有參數的情況下工作?
- 22. 在不添加參數的情況下在基類中創建基於這三個函數的通用函數
- 23. 在不寫封裝類的情況下解析請求參數
- 24. 在不啓動子類的情況下設置參數?
- 25. 在不指定參數的情況下使用強類型方法作爲參數
- 26. 如何在這種情況下定義JPA關係的類型?
- 27. 在不丟失數據的情況下更改列類型
- 28. 在不知道類型的情況下打印數據?
- 29. 在不知道類型的情況下設置數組值
- 30. 不同的參數類型
閱讀過載; http://msdn.microsoft.com/en-gb/library/vstudio/ms229029(v=vs.100).aspx –