Frage

C # Net 2.0

Hier ist der Code (Ich habe all meine domänenspezifischen Sachen, und es gibt immer noch ein leeres Array):

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; }
        }

    }
}
War es hilfreich?

Lösung

Die parameterlos GetFields() kehrt öffentliche Felder aus. Wenn Sie nicht-öffentlich diejenigen mögen, verwenden Sie:

cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

oder was auch immer geeignete Kombination Sie wollen - aber Sie tun müssen mindestens eine der Instance und Static angeben, sonst wird es auch nicht finden. Sie können beide angeben, und in der Tat öffentliche Bereiche als auch, alles zu bekommen:

cc.GetType().GetFields(BindingFlags.Instance | 
                       BindingFlags.Static |
                       BindingFlags.NonPublic |
                       BindingFlags.Public);

Andere Tipps

Da das Feld privat ist, müssen Sie die Überlastung von GetFields () verwenden, die Sie BindingFlags.NonPublic .

Um diese Arbeit zu machen, ändern Sie es an:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

Sie müssen angeben, dass Sie die privaten (NonPublic) Felder

wollen

Wechsel zu:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top