UpT*_*eek 57 .net c# reflection
如果我使用
sometype.GetProperties();
Run Code Online (Sandbox Code Playgroud)
我从类型中获取所有属性,并且它是父级.但是我只想检索在这种类型中显式定义的属性(而不是父类).我认为那是BindingFlags.DeclaredOnly选项的用途.
但是,当我尝试这个:
sometype.GetProperties(BindingFlags.DeclaredOnly);
Run Code Online (Sandbox Code Playgroud)
我得到0个属性.
谁知道我做错了什么?
Pet*_*ete 82
如果指定any BindingFlags,则需要明确指定要获取的属性.例如:
sometype.GetProperties (BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)
Gro*_*roo 47
总结一下:
如果您使用GetProperties()重载(没有参数),您将获得所有公共属性.
另一方面,如果使用GetProperties(BindingFlags)重载(接受BindingFlags参数的那个),则需要在以下标志的每组中指定至少一个的按位OR:
BindingFlags.Instance/ BindingFlags.Static(实例与静态属性),BindingFlags.Public/ BindingFlags.NonPublic(公共与非公共财产). 例如,要获取公共静态属性,您需要调用GetProperties(BindingFlags.Public | BindingFlags.Static)才能获得结果.仅调用GetProperties(BindingFlags.Public)或GetProperties(BindingFlags.Static)不会返回任何结果.
另请注意,指定BindingFlags.Default将返回一个空数组.
有关详细信息,请参阅GetProperties(BindingFlags)的MSDN文档:
以下BindingFlags 过滤器标志可用于定义要包含在搜索中的嵌套类型:
- 您必须指定
BindingFlags.Instance或BindingFlags.Static返回以获得退货.- 指定
BindingFlags.Public在搜索中包含公共属性.- 指定
BindingFlags.NonPublic在搜索中包含非公共方法(即私有,内部和受保护方法).仅返回基类上的受保护和内部方法; 不返回基类的私有方法.- 指定
BindingFlags.FlattenHierarchy在层次结构中包含公共和受保护的静态成员; 不包括继承类中的私有静态成员.以下BindingFlags 修饰符标志可用于更改搜索的工作方式:
BindingFlags.DeclaredOnly仅搜索在Type上声明的属性,而不是仅继承的属性.
Jar*_*Par 15
你需要稍微扩展你的BindingsFlag.他们需要至少包括可访问性级别和实例与静态,以便获得任何有意义的东西.
我认为您实际需要的是以下内容
var flags = BindingFlags.DeclaredOnly
| BindingFlags.Instance
| BindingFlags.Public;
someType.GetProperties(flags);
Run Code Online (Sandbox Code Playgroud)