【发布时间】:2015-02-02 21:41:36
【问题描述】:
我创建了一个通用委托,我想为它分配一个不带任何参数的函数。 有可能吗?
这是我目前尝试过的:
class Program
{
public delegate void TemplateDel<T>(T item);
public static void fWriteLetters(char[] p_cLetters)
{
for (int i = 0; i < p_cLetters.Length; i++)
Console.WriteLine(p_cLetters[i]);
}
void fNoArg()
{
Console.WriteLine("No arguments!");
}
static void Main(string[] args)
{
TemplateDel<char[]> l_dWriteLeters = new TemplateDel<char[]>(fWriteLetters);
TemplateDel<void> l_dNoArg = new TemplateDel<void>(fWriteLetters);
}
}
最后一行代码没有编译...
【问题讨论】:
-
“不编译”意味着一条错误消息——它是什么?另外,最后一行不应该是
new TemplateDel<void>(fNoArg)而不是fwriteLetters吗? -
作为一个风格点:不要为此定义你自己的委托类型。使用框架中的
Func或Action委托之一,它们已经存在最多 16 个参数。如果使用事件处理程序 - 采用 (object,EventArgs) 对 - 然后使用EventHandler。由于这些都是您的代码的知名读者,因此您会更好地了解您在做什么。 -
void in C# generics?的可能重复