[英]C# defining one method for different types of argument
我已經看到您可以為c#中的不同參數集定義不同的函數,如下所示:
public bool foo(string bar) {
//do something1
}
public bool foo(int bar, bool spam) {
//do something2
}
但是可以為不同的參數集創建一個函數定義嗎? 就我而言,它將用於IList
和List
。 由於這些類型僅略有不同,因此我可以對IList
和List
對象使用相同的函數(這是一個簡單的函數,僅查找某些特定元素)。 是否有任何聰明的方法可以做到這一點,例如不是復制粘貼?
謝謝!
是的,您只能使用IList
作為參數類型,因為List
實現了IList
。
例如,您可以聲明
public void MethodName(IList list)
{
// Method's body.
}
並且您將傳遞的列表可以是具體的List
或實現IList
的類型,而無需聲明兩個方法。
好吧,如果您嘗試使用IList
和List
。 我認為您不需要其他方法。 由於List
實現了IList
,因此您可以輕松地將它們IList
代碼。 因此,相同的功能將對兩者都起作用。
而且,如果您不修改函數中的項目,則可以更進一步,將IEnumerable
用作參數類型。
如 -
protected void Method(IList list){
}
要么
protected void Method(IEnumerable items){
}
但是請記住,使用接口時會有所不同,它們由引用傳遞,因此不會創建新副本。 您所做的任何修改都會影響原始的項目集合。 如果您需要按值傳遞或要在內部創建新的復制調用.ToList()
-
如 -
protected void Method(IList list){
//some code
var copied = list.ToList();
}
要么
protected void Method(IEnumerable items){
//some code
var copied = items.ToList();
}
IList內部繼承的列表對象。 因此,無論您在方法中使用哪種對象類型,都可以在調用方法時將IList轉換為List對象或將List對象轉換為IList。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.