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

或你想要的任何适当的组合 - 但你的的需要指定InstanceStatic的至少一个,否则将无法找到任何。您可以同时指定,而事实上公共领域以及,让一切:

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

其他提示

由于该领域是私有的,需要使用载的GetFields()允许指定 BindingFlags.非公开.

使这项工作,将其更改为:

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

您需要指定所需的专用(非公开)领域

更改为:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top