2015-04-28 91 views
1

我有以下的委託:傳遞變量參數傳遞給委託

public delegate object DynamicFunction(dynamic target, params object[] args); 

然而,當我嘗試創建它:

DynamicFunction func = new DynamicFunction((t) => { 
    //Handle t 
}); 

編譯器會引發一個錯誤,指出該委託不拿1參數,即使我指定最後一個參數是params object[]

如果我通過只有一個代表額外的參數,它的工作原理。 例如:

DynamicFunction func = new DynamicFunction((t,a) => { 
    //Handle t 
}); 

不過,我不想指定額外的參數,因爲我故意想這些參數是可選。

這裏發生了什麼?

回答

2

params表示編譯器會在你調用函數來轉換你傳遞給數組的任何參數時做出聰明的事情。

這並不意味着該函數本身需要1或2個參數,並不意味着有2個版本的函數f(dynamic target)f(dynamic target, params object[] args)

請注意,您仍然希望能夠調用

func (1); 
func(1, optional1, optional2); 

所以您的代理需要同時處理。

1

調用委託調用者可以提供1 ... n個參數。你現在正在做的不是調用委託,而是將一個兼容的方法分配給該類型的委託。這樣做時,您需要提供恰好兩個參數(適當類型的參數),因爲這就是委託人定義必須接受的內容。