如何在构造函数c#中声明一个void?

如何在构造函数c#中声明一个void?,c#,C#,我发现这段代码(没有编译错误,意思是代码没有错误)“PingCompletedEventHandler”具有类似PingCompletedEventHandler(abc)的构造函数,具有静态无效abc(对象s,PingCompletedEventArgs e){}对吗 他们怎么能这样做。我已经在我的代码中进行了测试,它不起作用。这是我的测试: class Class1 { static void abcd(int a){ } public // Error here:

我发现这段代码(没有编译错误,意思是代码没有错误)“PingCompletedEventHandler”具有类似PingCompletedEventHandler(abc)的构造函数,具有静态无效abc(对象s,PingCompletedEventArgs e){}对吗

他们怎么能这样做。我已经在我的代码中进行了测试,它不起作用。这是我的测试:

class Class1
{
    static void abcd(int a){
    }
    public 
// Error here: Class1.abcd(int)' is a 'method' but is used like a 'type'
    Class1(abcd)
    {

    }
}

class Class3
{
    public static void Main()
    {
        Class1 asd = new Class1();
    }
}

创建事件处理程序时,在处理程序构造函数中提供指向方法的指针。这不是“void”,而是指向类型为
void
的方法的委托

因此,构造器应类似于:

delegate void HandlerMethod(objects s, PingCompletedEventArgs  e);
class PingCompletedEventHandler {
    PingCompletedEventHandler(HandlerMethod handler) { ... }
}
现在,您可以使用
new PingCompletedEventHandler(abc)
调用此构造函数,因为
abc
是一个类型为
void
的方法,需要类型为
object
和类型为
PingCompletedEventArgs
的参数

关于代表的进一步阅读

编辑:自.NET 3.0以来,还有一种更易于阅读的
操作
-类型,可用于不返回任何内容的方法(
void
)。因此,您也可以使用
PingCompletedEventHandler(操作处理程序)
而不是定义自己的委托


进一步编辑:为了让它在测试中发挥作用,您的
Class1
构造函数应该如下所示:
Class1(Action theAction)

创建事件处理程序时,您提供了指向处理程序构造函数中方法的指针。这不是“void”,而是指向类型为
void
的方法的委托

因此,构造器应类似于:

delegate void HandlerMethod(objects s, PingCompletedEventArgs  e);
class PingCompletedEventHandler {
    PingCompletedEventHandler(HandlerMethod handler) { ... }
}
现在,您可以使用
new PingCompletedEventHandler(abc)
调用此构造函数,因为
abc
是一个类型为
void
的方法,需要类型为
object
和类型为
PingCompletedEventArgs
的参数

关于代表的进一步阅读

编辑:自.NET 3.0以来,还有一种更易于阅读的
操作
-类型,可用于不返回任何内容的方法(
void
)。因此,您也可以使用
PingCompletedEventHandler(操作处理程序)
而不是定义自己的委托


进一步编辑:为了让它在测试中起作用,你的
Class1
构造函数应该是这样的:
Class1(Action theAction)
当你想要一个函数作为方法或构造函数的参数时,你必须使用

最简单的方法是,如果您有一个Void返回类型,则使用a;如果您有其他返回类型,则使用a

在您的情况下,它将如下所示:

public ClassConstructor(Action<YourParameter> myDelegate)
{
}
然后您需要一个代理,它接受一个
int
作为返回类型,接受两个
int
s作为参数

因此,您可以像这样定义
Func
,并指定原始方法:

Func<int, int, int> addDelegate = Add;

当您希望函数作为方法或构造函数的参数时,必须使用

最简单的方法是,如果您有一个Void返回类型,则使用a;如果您有其他返回类型,则使用a

在您的情况下,它将如下所示:

public ClassConstructor(Action<YourParameter> myDelegate)
{
}
然后您需要一个代理,它接受一个
int
作为返回类型,接受两个
int
s作为参数

因此,您可以像这样定义
Func
,并指定原始方法:

Func<int, int, int> addDelegate = Add;

不能使用void作为参数定义构造函数。我认为您将本地
字符串
变量
abcd
与您的方法
abcd
混合在一起,我认为PingCompletedEventHandler是一个委托,这就是为什么它能够将abc方法作为参数,而Class1()构造函数是一个简单的方法,这就是为什么它不能工作的原因,如果构造函数接受委托的话。这就是你传入的一个方法被用作方法组,你不能定义一个以void为参数的构造函数。我认为您将本地
字符串
变量
abcd
与您的方法
abcd
混合在一起,我认为PingCompletedEventHandler是一个委托,这就是为什么它能够将abc方法作为参数,而Class1()构造函数是一个简单的方法,这就是为什么它不能工作的原因,如果构造函数接受委托的话。这就是您传入的方法,它被用作方法组