2010-10-03 67 views
1

我很好奇,如果有可能創建一個帶有隱式類型參數的委託方法。這是我想要完成的。這種事情不會爲我編譯,但它應該讓你知道我正在努力完成什麼。C#的委託方法可以採用隱式類型參數嗎?

這裏就是我想要使用委託調用函數:

class MyClass 
{ 
    ArrayList function1(int param1, int param2) 
    { 
     ...do something... 
    } 
    ArrayList function2(string param3) 
    { 
     ...do something... 
    } 
} 

而這裏的調用它們的類:

class MyOtherClass 
{ 
    delegate ArrayList delFunc(params object[] args); 

    myOtherClass() 
    { 
     MyClass myClassInstance = new myClass(); 
     delFunc myDelFunc1 = myClassInstance.function1; 
     delFunc myDelFunc2 = myClassInstance.function2; 

     myDelFunc1(1,2); 
     myDelFunc2("hello world"); 
    } 


} 

很顯然,在這個例子中,你只想實際調用所提供的功能。我實際上想要做的是創建一個包裝函數,它允許您提供一個函數作爲具有任何可能的參數列表的委託。

我能想出的唯一解決方案是使MyClass中的函數也參數列表。但是,這會讓任何直接調用這些函數的人感到困惑。這就是我的意思是:

class MyClass 
{ 
    ArrayList function1(params object[] args) 
    { 
     ...do something... 
    } 
    ArrayList function2(params object[] args) 
    { 
     ...do something... 
    } 
} 

現在它編譯,但我需要猜測,或閱讀評論,找出通到功能1和功能2。另外,它在編譯時曾經失敗,現在它在運行時失敗。一切都非常糟糕的事情......

我想可能有一些語法我失蹤了做這樣的事情

delegate ArrayList delFunc(MatchAnyArgumentSignature); 

乾杯, 羅布

回答

1

只需要用行動<牛逼>或動作< T1,T2,...... >:

public void Something(int arg1, int arg2, int arg3) { 
    ... 
} 
的方法內

和任何地點:

Action<int, int, int> call = Something; 
call(1, 2, 3); 

在這種情況下,您不能使用var。

無論如何,你不應該再使用ArrayList了。

編輯:

如果這些代表應該返回的東西,還有函數功能<TResult>,Func鍵< T1..TN,TResult >

+0

大,應該做的伎倆!順便說一句,是ArrayLists不推薦或什麼的? – Lockyer 2010-10-03 21:19:46

+0

使用列表而不是ArrayList – Maxem 2010-10-03 21:20:38

+0

k,感謝您的幫助! – Lockyer 2010-10-03 21:22:20

相關問題