이 반사 코드에 무슨 문제가 있습니까? getfields ()가 빈 배열을 반환합니다

StackOverflow https://stackoverflow.com/questions/1040803

  •  22-07-2019
  •  | 
  •  

문제

C#, 순 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() 보고 공공의 필드. 비공개 비공개를 원한다면 사용하십시오.

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

또는 원하는 적절한 조합이 무엇이든 - 그러나 당신 하다 적어도 하나를 지정해야합니다 Instance 그리고 Static, 그렇지 않으면도 찾을 수 없습니다. 모든 것을 얻기 위해 두 가지와 실제로 공공 분야를 지정할 수 있습니다.

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

다른 팁

필드는 비공개이므로 지정할 수있는 getfields ()의 과부하를 사용해야합니다. bindingflags.nonpublic.

이 작업을 수행하려면 다음으로 변경하십시오.

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

개인 (비 공개) 필드를 원하는 것을 지정해야합니다.

로 변경:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top