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

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

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

Re[2]: InvokeMemberの参照渡しについて


(過去ログ 88 を表示中)

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

■52642 / inTopicNo.1)  InvokeMemberの参照渡しについて
  
□投稿者/ にぅたん (1回)-(2010/08/18(Wed) 20:12:21)

分類:[.NET 全般] 

InvokeMemberを使ったメソッド呼出し時に、参照渡し引数を指定するやり方がわかりません。
ParameterModifierを使えばいいのかと思ったのですが、結果的に値渡しのような動作になってしまいます。
方法が間違ってるのでしょうか。


Imports System.Reflection
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim IsHogeFlag As Boolean = False

Dim t As Type = GetType(ClsFuga)
Dim obj As Object = t.InvokeMember(Nothing, BindingFlags.CreateInstance, _
Nothing, Nothing, New Object() {})
Dim p As New ParameterModifier(1)
p(0) = True
Dim mods() As ParameterModifier = {p}
Dim args() As Object = {IsHogeFlag}

Console.WriteLine(IsHogeFlag.ToString()) ' Falseが表示
obj.GetType().InvokeMember("FugaMethod", BindingFlags.InvokeMethod, Nothing, obj, _
args, mods, Nothing, Nothing)
Console.WriteLine(IsHogeFlag.ToString()) ' Trueが表示されて欲しいがFalseのまま
End Sub
End Class
Public Class ClsFuga
Public Sub FugaMethod(ByRef IsHogeFlag As Boolean)
IsHogeFlag = True
End Sub
End Class

引用返信 編集キー/
■52643 / inTopicNo.2)  Re[1]: InvokeMemberの参照渡しについて
□投稿者/ 魔界の仮面弁士 (1755回)-(2010/08/18(Wed) 20:50:05)
No52642 (にぅたん さん) に返信
> ParameterModifierを使えばいいのかと思ったのですが、結果的に値渡しのような動作になってしまいます。

実行後に「IsHogeFlag = CBool(args(0))」しましょう。
引用返信 編集キー/
■52657 / inTopicNo.3)  Re[2]: InvokeMemberの参照渡しについて
□投稿者/ にぅたん (2回)-(2010/08/19(Thu) 09:45:39)
2010/08/19(Thu) 09:49:20 編集(投稿者)
2010/08/19(Thu) 09:49:14 編集(投稿者)

No52643 (魔界の仮面弁士 さん) に返信
> ■No52642 (にぅたん さん) に返信
>>ParameterModifierを使えばいいのかと思ったのですが、結果的に値渡しのような動作になってしまいます。
>
> 実行後に「IsHogeFlag = CBool(args(0))」しましょう。


おかげさまで正常に参照渡しとして取得できました。
ありがとうございました。

Imports System.Reflection
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim IsHogeFlag As Boolean = False

Dim t As Type = GetType(ClsFuga)
Dim obj As Object = t.InvokeMember(Nothing, BindingFlags.CreateInstance, _
Nothing, Nothing, New Object() {})
Dim p As New ParameterModifier(1)
p(0) = True
Dim mods() As ParameterModifier = {p}
Dim args() As Object = {IsHogeFlag}

Console.WriteLine(IsHogeFlag.ToString())
obj.GetType().InvokeMember("FugaMethod", BindingFlags.InvokeMethod, Nothing, obj, _
args, mods, Nothing, Nothing)
IsHogeFlag = CBool(args(0)) '★追加
Console.WriteLine(IsHogeFlag.ToString())
End Sub
End Class
Public Class ClsFuga
Public Sub FugaMethod(ByRef IsHogeFlag As Boolean)
IsHogeFlag = True
End Sub
End Class

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -