C#的委托方法可以采用隐式类型参数吗?

问题描述:

我很好奇,如果有可能创建一个带有隐式类型参数的委托方法。这是我想要完成的。这种事情不会为我编译,但它应该让你知道我正在努力完成什么。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); 

干杯, 罗布

只需要用行动<牛逼>或动作< 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