如何在构造函数c#中声明一个void?
我发现这段代码(没有编译错误,意思是代码没有错误)“PingCompletedEventHandler”具有类似PingCompletedEventHandler(abc)的构造函数,具有静态无效abc(对象s,PingCompletedEventArgs e){}对吗 他们怎么能这样做。我已经在我的代码中进行了测试,它不起作用。这是我的测试:如何在构造函数c#中声明一个void?,c#,C#,我发现这段代码(没有编译错误,意思是代码没有错误)“PingCompletedEventHandler”具有类似PingCompletedEventHandler(abc)的构造函数,具有静态无效abc(对象s,PingCompletedEventArgs e){}对吗 他们怎么能这样做。我已经在我的代码中进行了测试,它不起作用。这是我的测试: class Class1 { static void abcd(int a){ } public // Error here:
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()构造函数是一个简单的方法,这就是为什么它不能工作的原因,如果构造函数接受委托的话。这就是您传入的方法,它被用作方法组