|
分類:[C#]
2008/07/09(Wed) 21:23:21 編集(投稿者)
開発環境:Visual Studio 2008 使用言語:Visual C#
こんばんは、めろぱんと申します。
ポインタ変数のリフレクションについて教えてください。
あるクラスにprivateなメンバ変数があるとします。 このメンバ変数に外部から(無理やり)アクセスする方法として リフレクションがあると思いますが、 メンバ変数がポインタでもアクセスできるできるものなのでしょうか? と質問したのは、やってみたらビルドエラーが発生してしまったためです。
例をあげると以下のような感じです。 (コードに意味はありません)
using System.Reflection;
namespace AAA { unsafe public class ClassA { private int* m_pData; // アクセスしたいポインタ変数 ・・・
public void Method1() { if( m_pData == null) { ・・・ } } }
unsafe public class ClassB { public void Method2() { ClassA classA = new ClassA(); int data = 0; Type type = typeof(ClassA); FieldInfo fieldinfo = type.GetField("m_pData", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance); fieldinfo.SetValue(classA, &data); // ここでビルドエラー classA.Method1(); ・・・ } } }
FieldInfo.SetValueの第2引数はObject型を渡すことになっており、 ここにポインタを渡しているのがよくなさそうなのですが、 ではどうやって渡せば?というところで行き詰まっています。 解決策をご存知の方、ご教示いただけると幸いです。
ちなみに、そもそも外部からアクセスしたいならprivateにするな、 と言われそうですが、 例におけるClassA.Method1()の単体テストを目的としています。 例にも書きましたが、m_pDataがnullかどうかで分岐する部分の テストをしたいためです。
よろしくお願いします。
|