delegate的写法在不同版本支持不同。c#支持匿名的方法,但是否有返回值的都叫方法,vb.net 2005中,只提供了匿名函数 Function关键字到了2010提供了Sub的关键字。支持匿名过程。 例如: c#的写法public delegate void VoidDelegate(int i); public static void TestDelegate(VoidDelegate vd) { vd(100); } static void Main(string[] args) { TestDelegate(delegate(int i) { Console.WriteLine(i); }); TestDelegate(i => Console.WriteLine(i)); Console.ReadKey(); }对应的vb.net写法为://(2010)支持 Public Delegate Sub VoidDelegate(ByVal i As Integer) Public Sub TestDelegate(ByVal vd As VoidDelegate) vd(100) End Sub Sub Main() TestDelegate(Sub(i As Integer) Console.WriteLine(i)) Console.ReadKey() End Sub //(2008)支持 Sub Main() TestDelegate(Function(i As Integer) Console.WriteLine(i) Return Nothing End Function ) Console.ReadKey() End Sub Public Delegate Function VoidDelegate(ByVal i As Integer) Public Sub TestDelegate(ByVal vd As VoidDelegate) vd(100) End Sub
1. Me 2. VB.NET 不支持 多行Lambda 跟 匿名委托. VS2008版本(含)一下 , VS2010暂时未研究.所以写法需要修改为:AddHandle myClass.myEvent, AddressOf YourSubSub YourSub() Console.Write("...") End Sub
另外,那个vb里delegate可以这样用吗?
有些简单的语句就省另写方法了
例如:
c#的写法public delegate void VoidDelegate(int i);
public static void TestDelegate(VoidDelegate vd)
{
vd(100);
}
static void Main(string[] args)
{
TestDelegate(delegate(int i) { Console.WriteLine(i); });
TestDelegate(i => Console.WriteLine(i));
Console.ReadKey();
}对应的vb.net写法为://(2010)支持
Public Delegate Sub VoidDelegate(ByVal i As Integer)
Public Sub TestDelegate(ByVal vd As VoidDelegate)
vd(100)
End Sub
Sub Main()
TestDelegate(Sub(i As Integer) Console.WriteLine(i))
Console.ReadKey()
End Sub
//(2008)支持
Sub Main()
TestDelegate(Function(i As Integer)
Console.WriteLine(i)
Return Nothing
End Function
)
Console.ReadKey()
End Sub Public Delegate Function VoidDelegate(ByVal i As Integer)
Public Sub TestDelegate(ByVal vd As VoidDelegate)
vd(100)
End Sub
2. VB.NET 不支持 多行Lambda 跟 匿名委托. VS2008版本(含)一下 , VS2010暂时未研究.所以写法需要修改为:AddHandle myClass.myEvent, AddressOf YourSubSub YourSub()
Console.Write("...")
End Sub