Gan*_*shT 26 c# reflection properties access-modifiers
public class TestClass
{
public string property1 { get; set; }
public string property2 { get; set; }
internal string property3 { get; set; }
internal string property4 { get; set; }
internal string property5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下循环遍历属性,但它只显示公共属性.我需要所有的属性.
foreach (PropertyInfo property in typeof(TestClass).GetProperties())
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 57
您需要使用重载接受来指定您不仅需要公共属性BindingFlags:
foreach (PropertyInfo property in typeof(TestClass)
.GetProperties(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
添加BindingFlags.Static如果您要包括静态属性.
无参数重载仅返回公共属性.
jas*_*son 10
你需要改变BindingFlags你的电话Type.GetProperties
尝试:
var instanceProperties = typeof(TestClass).GetProperties(
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance
);
foreach(var instanceProperty in instanceProperties) {
// a little something something for the instanceProperty
}
Run Code Online (Sandbox Code Playgroud)
根据MSDN,Reflection API不识别私有和内部。
若要使用反射标识内部方法,请使用IsAssembly属性。若要标识受保护的内部方法,请使用IsFamilyOrAssembly。
如果要编写一些测试单元,则可能需要查看InternalsVisibleTo属性。它允许您指定哪个程序集可以看到内部属性。
最后,您真的需要具有内部属性吗?