1

別のオブジェクトが作成されたオブジェクト(またはオブジェクトタイプ)を取得する方法を探しています。例:

public class RootClass
{
    public class A
    {
        public void MethodFromA()
        {

        }
    }

    public class B
    {
        public A A_object = new A();
        public void MethodFromB() { }
    }

    B BObject = new B();
    A rootAObject = new A();

    public void DoMethod(A anA_object)
    {

    }

    main()
    {
        /* Somehow through reflection
         * get the instance of BObject 
         * of type B from only the info
         * given in anA_object or at
         * the very least just know that
         * anA_object was created in
         * class B and not root. */
        DoMethod(BObject.A_object);

        /* Same as above except know that
         * this A object came from root 
         * and is not from B class */
        DoMethod(rootAObject);
    }
}

追加情報: これは、私が持っている大規模なプロジェクトの一部をシミュレートするための簡単なコードです。問題は、他のさまざまなクラスの多くの場所でインスタンス化されたカスタム クラスがあることです。このカスタム クラスには、そのクラス内の任意の関数、またはそれをインスタンス化したクラス内の任意の関数を呼び出すことができる関数があります。非常に一般的な処理ですが、必要です。基本的に、「。」の逆が必要です。したがって、objectA.objectB では、objectB を関数に渡すだけで objectA を見つける必要があります。

ありがとう!

4

4 に答える 4

1

いいえ - この情報はどこにも保存されません。あったとしても、事実上、簡単に時代遅れになる可能性があることに注意してください。例えば:

// Code as before
BObject.A_object = rootAObject;
rootAObject = null;
DoMethod(BObject.A_object);

それは今何を示すべきですか?の現在の値はBObject.A_objectとして作成されましrootAObjectたが、 の現在の値rootAObjectは null です。BObjectそれを「所有者」として表示したい場合は、実際には作成について話しているわけではありません...そしてその時点で、オブジェクトが複数の参照を持っている可能性に対処する必要があります。

全体像についてもっと情報を提供してください。あなたが本当に解決しようとしている問題は何ですか?

于 2010-08-16T05:29:46.053 に答える
0

DeclaringType は、コード モデルのエンクロージング タイプのみを通知しますが、目的はオブジェクトの作成ポイントを特定することです。

個々の MethodBody IL を読み取る以外に簡単な方法はありません。オブジェクトを作成するための IL コードは newobj です。これを実装するには、アセンブリ内のすべてのメソッドの MethodBody を読み取り、目的のオブジェクト タイプのタイプ オペランドを持つ newobj 命令を含むメソッドを識別する必要があります。

于 2010-08-16T05:34:39.223 に答える
0

あなたが探しているのは、興味のあるインスタンスDeclaringTypeで定義されたプロパティだと思います。 DeclaringType documentationを参照してください。System.Type

于 2010-08-16T05:19:22.017 に答える
0

すべてのオブジェクトを親パラメーターを持つカスタム オブジェクトから派生させることで解決しました。

于 2011-04-15T04:20:58.327 に答える