C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 【VB.NET】ファンクションからaddressofを返す


(過去ログ 125 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■74429 / inTopicNo.1)  【VB.NET】ファンクションからaddressofを返す
  
□投稿者/ TAR (1回)-(2014/12/27(Sat) 09:39:06)

分類:[VB.NET/VB2005 以降] 

【環境】
Windows7
VB.NET2010
.NET Framework 4

【質問】
ファンクションから、addressofで作成されたデリゲートを返すことは可能でしょうか?
感覚としては下記のようなことがしたいです。

function test()
    処理
end function

function func() as ???
    return addressof test
end function

以上、ご教授のほどよろしくお願いいたします。


引用返信 編集キー/
■74430 / inTopicNo.2)  Re[1]: 【VB.NET】ファンクションからaddressofを返す
□投稿者/ WebSurfer (448回)-(2014/12/27(Sat) 11:18:31)
No74429 (TAR さん) に返信

> ファンクションから、addressofで作成されたデリゲートを返すことは可能でしょうか?

デリゲートを定義すればできると思います。

C# なら間違いなくできます。VB.NET は未確認ですが同じようにできるのでは?
引用返信 編集キー/
■74431 / inTopicNo.3)  Re[2]: 【VB.NET】ファンクションからaddressofを返す
□投稿者/ TAR (2回)-(2014/12/27(Sat) 11:38:10)
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」で作成されたデリゲートと、上記の方法で作成されたデリゲートは異なっているように思えます。
その理由となるソースは後ほどアップしたいと思います(勝手ですが、都合により来年になるかと・・・)
その際は、お分かりになりましたらご教授いただけると幸いです。

引用返信 編集キー/
■74432 / inTopicNo.4)  Re[3]: 【VB.NET】ファンクションからaddressofを返す
□投稿者/ WebSurfer (449回)-(2014/12/27(Sat) 11:55:58)
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
'=======================================================

引用返信 編集キー/
■74433 / inTopicNo.5)  Re[1]: 【VB.NET】ファンクションからaddressofを返す
□投稿者/ shu (651回)-(2014/12/27(Sat) 12:58:50)
No74429 (TAR さん) に返信
>
> function test()
> 処理
> end function

function test() As Integer
処理
end function

とするべき。(関数は戻り値の型を明確に
戻り値がないならSubにすべき)



> function func() as ???
> return addressof test
> end function
>
??? を Func(Of Integer)にするだけでOK




引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -