C#使用反射获取对象的类型信息(public/private/static)
一.声明一个MyClass对象
public class MyClass { public int MyField; }
二.获取RequiredAttribute类型信息
MyClass instance = new MyClass(); FieldInfo field = instance.GetType().GetField("MyField")!; string fieldName = field.Name; PropertyInfo propertyInfo = instance.GetType().GetProperty(nameof(MyField))!; RequiredAttribute requiredAttribute = propertyInfo.GetCustomAttribute<RequiredAttribute>()!; // 获取必填字段信息 if (requiredAttribute != null) { string propertyName = propertyInfo.Name; // 获取属性名称 object propertyValue = propertyInfo.GetValue(instance)!; // 获取属性值 string propertyType = propertyInfo.PropertyType.Name; // 获取属性类型 // 进行属性验证 ValidationContext context = new ValidationContext(instance); context.MemberName = propertyName; Validator.ValidateProperty(propertyValue, context); }
三.获取其它状态类型字段信息
Type myType = typeof(MyClass); // 直接声明类型 // 获取 public 字段 FieldInfo publicField = myType.GetField("myPublicField")!; // 获取 private 字段(默认只能获取 public 字段) FieldInfo privateField = myType.GetField("myPrivateField", BindingFlags.NonPublic | BindingFlags.Instance)!; // 获取静态字段 FieldInfo staticField = myType.GetField("myStaticField", BindingFlags.Static | BindingFlags.Public)!;