lamda表达式 是什么类型 java

2025-05-04 20:26:48
推荐回答(1个)
回答1:

C#中的Delegate对应于C中的指针,但是又有所不同C中的指针既可以指向方法,又可以指向变量,并且可以进行类型转换,C中的指针实际上就是内存地址变量,他是可以直接操作内存的,通过内存地址直接访问变量,直接调用方法。而C#中的Delegate是强类型的,也就是说在声明委托时就已经指定了该变量只能指向具有特定参数,以及返回值的方法。使用delegate就可以直接建立任何名称的委托类型,当进行系统编译时,系统就会自动生成此类型。您可以使用delegatevoidMyDelegate()方式建立一个委托类,并使用ILDASM.exe观察其成员。由ILDASM.exe中可以看到,它继承了System.MulticastDelegate类,并自动生成BeginInvoke、EndInvoke、Invoke等三个常用方法。Invoke方法是用于同步调用委托对象的对应方法,而BeginInvoke、EndInvoke是用于以异步方式调用对应方法的。?12345678publicclassMyDelegate:MulticastDelegate{//同步调用委托方法publicvirtualvoidInvoke();//异步调用委托方法publicvirtualIAsyncResultBeginInvoke(AsyncCallbackcallback,objectstate);publicvirtualvoidEndInvoke(IAsyncResultresult);}MulticastDelegate是System.Delegate的子类,它是一个特殊类,编译器和其他工具可以从此类派生,但是自定义类不能显式地从此类进行派生。它支持多路广播委托,并拥有一个带有链接的委托列表,在调用多路广播委托时,系统将按照调用列表中的委托出现顺序来同步调用这些委托。MulticastDelegate具有两个常用属性:Method、Target。其中Method用于获取委托所表示的方法Target用于获取当前调用的类实例。