C#、Net 2.0
コードは次のとおりです(ドメイン固有のものをすべて取り出しても、空の配列が返されます)。
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ChildClass cc = new ChildClass();
cc.OtherProperty = 1;
FieldInfo[] fi = cc.GetType().GetFields();
Console.WriteLine(fi.Length);
Console.ReadLine();
}
}
class BaseClass<T>
{
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
}
class ChildClass : BaseClass<ChildClass>
{
private int myVar;
public int OtherProperty
{
get { return myVar; }
set { myVar = value; }
}
}
}
パラメータのないGetFields()
はpublicフィールドを返します。非公開のものが必要な場合は、以下を使用してください。
cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
または、必要な適切な組み合わせ-ただし、doInstance
とStatic
の少なくとも1つを指定する必要があります。そうしないと、どちらも見つかりません。すべてを取得するために、両方を指定でき、実際にはパブリックフィールドも指定できます。
cc.GetType().GetFields(BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.NonPublic |
BindingFlags.Public);
フィールドはプライベートであるため、 BindingFlags.NonPublic を指定できるGetFields()のオーバーロードを使用する必要があります。
これを機能させるには、次のように変更します。
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
プライベート(非パブリック)フィールドが必要であることを指定する必要があります
への変更:
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);