3

たとえば、次のクラスがあります。

public class Level1
{
    public int intprop;
    public Level2 level2;
}

public class Level2
{   
    public string strprop;
    public Level3 level3;
}

public class Level3
{
    public float fltprop;
}

fltprop を取得した場合、このプロパティ階層がこの Level1.level2.level3.fltproのようであることを知る方法は?

プロパティの場所の階層を知る方法はありますか?

アップデート:

Level1 から Level3 のクラスを調べてみると、Level1 => level2 => level3 => fltprop の中に fltprop が常駐していることがわかります。

fltprop を PropertyInfo として取得した場合にリフレクションを使用すると、このプロパティが Level1 => level2 => level3 からのものであることがわかりますか? propertyinfo を取得すると、このプロパティのルート level3 がわかり、level3 のルート level2 がわかり、level2 のルートが level1 であることがわかります。

4

1 に答える 1

2

プロパティの場所の階層を知る方法はありますか?

いいえ、ありません。

プロパティ (実際にはフィールドです) を読み取ると、値が表示されます。読み取ったオブジェクトのタイプに関する情報はありません。オブジェクト自体 ( Level3object ) がある場合、コンパイラまたはランタイムがそのオブジェクトをどこから取得したかを知る方法はありません。の新しいインスタンスを作成したばかりLevel3か、別のオブジェクトのプロパティから読み取った可能性があります。ランタイムではなく、それを知っているだけです。

編集:

タイプのオブジェクトとともにPropertyInfofor をメソッドに渡すとします。メソッドが持つすべての情報は、プロパティ名がであり、型からのものであるということです。これは、メソッドに渡したオブジェクトがどこから来たのかをメソッドに伝えません。これも型情報には格納されません。実際、 の型情報を読むと、どのように型を取得しても同じです。fltpropLevel3fltpropLevel3Level3 Level3Level3

var type1 = level3Obj.GetType();
var type2 = level1Obj.level2.level3.GetType();
var type3 = typeof(Level3);
var type4 = fltpropPropertyInfo.ReflectedType;

Console.WriteLine( type1 == type2 ); // outputs 'true'
Console.WriteLine( type2 == type3 ); // also outputs 'true'
Console.WriteLine( type3 == type4 ); // also 'true'
于 2013-03-13T09:26:36.423 に答える