- - PR -
動的モジュール呼び出し(リフレクション)で参照渡し
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-09-06 23:12
動的モジュール呼び出しでインスタンスを生成するときに
コンストラクタに渡す引数を参照渡しで渡したいと思っているのですが どのようにすればよろしいのでしょうか。 ご存知でしたらお願いします。 具体的には下記のようなソースです。 object[] param = new object[1]; param[0] = Object; modelType = Type.GetType("namespace.className"); model = Activator.CreateInstance(modelType, param); |
|
投稿日時: 2003-09-08 11:29
追記です。
調査を進めていたのですが、ヘルプに以下のような記述がありました。 「このインスタンスで表されるメソッドまたはコンストラクタが ByRef パラメータをとる場合、この関数を使用してメソッドまたはコンストラクタを呼び出すために、このパラメータに特別な属性は必要ありません。」 つまり、呼び出される側がref指定していれば参照渡しされるという事だと思うのですが 実際やってみても思ったとおりの動作をしません。 以下に実行してみたサンプルを書いておきますので、おかしな箇所がありましたら ご指摘願います。 CLASS1 static void Main(string[] args) { string a = "test"; Type modelType; object model; modelType = Type.GetType("ConsoleApplication3.Class2"); model = Activator.CreateInstance(modelType, null); Console.WriteLine(a); object[] param = new object[1]; param[0] = a; MethodInfo test = modelType.GetMethod("setValue"); test.Invoke(model, param); Console.WriteLine(a); } CLASS2 public class Class2 { public Class2(){} public void setValue(ref string a) { a = "aiueo"; } } 実行結果は test aiueo となるのを期待しているのですが、結果は test test となり、参照渡しされていないようです。 |
|
投稿日時: 2003-09-08 12:57
CLASS1の最後の行を
Console.WriteLine(param[0]); と変更することにより実現できました。 ご迷惑おかけしました。 |
1