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

 

posted @ 2023-04-26 17:04  Tammytan  阅读(675)  评论(0编辑  收藏  举报