- PR -

動的モジュール呼び出し(リフレクション)で参照渡し

1
投稿者投稿内容
まよかん
常連さん
会議室デビュー日: 2003/08/10
投稿数: 27
お住まい・勤務地: 大阪
投稿日時: 2003-09-06 23:12
動的モジュール呼び出しでインスタンスを生成するときに
コンストラクタに渡す引数を参照渡しで渡したいと思っているのですが
どのようにすればよろしいのでしょうか。
ご存知でしたらお願いします。

具体的には下記のようなソースです。

object[] param = new object[1];
param[0] = Object;
modelType = Type.GetType("namespace.className");
model = Activator.CreateInstance(modelType, param);
まよかん
常連さん
会議室デビュー日: 2003/08/10
投稿数: 27
お住まい・勤務地: 大阪
投稿日時: 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/08/10
投稿数: 27
お住まい・勤務地: 大阪
投稿日時: 2003-09-08 12:57
CLASS1の最後の行を
Console.WriteLine(param[0]);
と変更することにより実現できました。

ご迷惑おかけしました。
1

スキルアップ/キャリアアップ(JOB@IT)