이 반사 코드에 무슨 문제가 있습니까? getfields ()가 빈 배열을 반환합니다
-
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);
제휴하지 않습니다 StackOverflow