【環境】
Windows7
VB.NET2010
.NET Framework 4
【質問】
ファンクションから、addressofで作成されたデリゲートを返すことは可能でしょうか?
感覚としては下記のようなことがしたいです。
function test()
処理
end function
function func() as ???
return addressof test
end function
以上、ご教授のほどよろしくお願いいたします。
WebSurfer様
ご回答ありがとうございます。
ご指摘どおり、下記の方法で返すことはできました。
Delegate Function TestDelegate() As Integer
function test()
return 0
end function
function func() as TestDelegate
dim ret as TestDelegate
ret = new TestDelegate(Addressof test)
return ret
end function
ただ、「Addressof test」で作成されたデリゲートと、上記の方法で作成されたデリゲートは異なっているように思えます。
その理由となるソースは後ほどアップしたいと思います(勝手ですが、都合により来年になるかと・・・)
その際は、お分かりになりましたらご教授いただけると幸いです。
■No74431 (TAR さん) に返信
C# で検証してみましたが、以下のコードで期待通りになります。
namespace ConsoleApplication5
{
class Program
{
public delegate void MyDelegate();
public static void test()
{
Console.WriteLine("test called");
}
public static MyDelegate func()
{
return new MyDelegate(test);
}
static void Main(string[] args)
{
MyDelegate d = func();
d();
}
}
}
上記の C# のコードを http://converter.telerik.com/ というサイトで VB.NET に
変換すると以下のようになります。実際に動かして試してはいませんが、これでヒン
トになりませんか?
Namespace ConsoleApplication5
Class Program
Public Delegate Sub MyDelegate()
Public Shared Sub test()
Console.WriteLine("test called")
End Sub
Public Shared Function func() As MyDelegate
Return New MyDelegate(AddressOf test)
End Function
Private Shared Sub Main(args As String())
Dim d As MyDelegate = func()
d()
End Sub
End Class
End Namespace
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================