属性的反射和访问修饰符我写了一些代码来查看使用反射的属性。我使用反射从一个类中检索了一个属性列表。但是,我需要查明财产是公共的还是受保护的。例如:publicstringName{get;set;}protectedintAge{get;set;}PropertyInfo类似乎没有公开有关该属性的信息。还有别的办法吗?由于属性只是一对get/set方法的语法糖,因此无法反映属性的“可访问性”。相反,您必须分别确定get和set方法的可访问性级别。为此,使用GetGetMethod和GetSetMethod方法检索适当的MethodInfo对象,从中有各种IsPrivate、IsPublic和其他方法和属性。您需要查看每个get和set方法的methodInfo,例如:PropertyInfopi=...;boolisPublic=pi.GetGetMethod(true).IsPublic;boolisProtected=pi.GetGetMethod(true).IsFamily;好像是IsFamily属性,表示方法是否受保护。为此,我写了一个扩展方法:以上是C#学习教程:属性上的反射和访问修饰符分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——,AccessModifier.Public};publicstaticAccessModifierAccessmodifier(thisPropertyInfopropertyInfo){if(propertyInfo.SetMethod==null).GetMethod.Accessmodifier();如果(propertyInfo.GetMethod==null)返回propertyInfo.SetMethod.Accessmodifier();varmax=Math.Max(AccessModifiers.IndexOf(propertyInfo.GetMethod.Accessmodifier()),AccessModifiers.IndexOf(propertyInfo.SetMethod.Accessmodifier()));返回AccessModifiers[max];}publicstaticAccessModifierAccessmodifier(thisMethodInfomethodInfo){if(methodInfo.IsPrivate)returnAccessModifier.Private;如果(methodInfo.IsFamily)返回AccessModifier;ifProtectedmethodInfo.IsAssembly)返回AccessModifier.Inter最终;如果(methodInfo.IsPublic)返回AccessModifier.Public;thrownewArgumentException("没有找到访问修饰符","methodInfo");}}publicenumAccessModifier{Private,Protected,Internal,Public}staticvoidMain(){sampleobj=newsample();输入t=obj.GetType();MethodInfo[]m=t.GetMethods();Console.WriteLine("方法信息:-nn");foreach(MethodInfom1inm)控制台。WriteLine("方法名称:"+m1.Name+"nMethod返回类型:"+m1.ReturnType+"nIsstatic:"+m1.IsStatic+"nIsPublic:"+m1.IsPublic+"nIsPrivate:"+m1.IsPrivate);FieldInfo[]f=t.GetFields();Console.WriteLine("nn字段信息:-nn");foreach(FieldInfof1inf)Console.WriteLine("字段名:"+f1.Name+"nField类型:"+f1.FieldType+"nIsstaic:"+f1.IsStatic);控制台.Read();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
