using System.Reflection; namespace XFEExtension.NetCore.ReflectionExtension; /// /// 反射拓展 /// public static class ReflectionExtension { /// /// 获取方法默认参数 /// /// /// public static object?[] GetDefaultParameters(this MethodInfo method) { var parameters = method.GetParameters(); var defaultParameters = new object?[parameters.Length]; for (var i = 0; i < parameters.Length; i++) { var paramType = parameters[i].ParameterType; defaultParameters[i] = paramType.IsValueType ? Activator.CreateInstance(paramType) : null; } return defaultParameters; } /// extension(object obj) { /// /// 获取某个类中的某个私有字段的值 /// /// /// 字段名称 /// public T? GetPrivateField(string fieldName) { var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); return (T?)field?.GetValue(obj); } /// /// 设置某个类中的某个私有字段的值 /// /// 字段名称 /// 值 public void SetPrivateField(string fieldName, object value) { var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); field?.SetValue(obj, value); } /// /// 获取某个类中的某个私有属性的值 /// /// /// 属性名称 /// public T? GetPrivateProperty(string propertyName) { var property = obj.GetType().GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Instance); return (T?)property?.GetValue(obj); } /// /// 设置某个类中的某个私有属性的值 /// /// 属性名称 /// 值 public void SetPrivateProperty(string propertyName, object value) { var property = obj.GetType().GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Instance); property?.SetValue(obj, value); } } /// extension(Type type) { /// /// 获取某个类中的某个私有静态字段的值 /// /// /// 字段名称 /// public T? GetPrivateStaticField(string fieldName) { var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Static); return (T?)field?.GetValue(null); } /// /// 设置某个类中的某个私有静态字段的值 /// /// 字段名称 /// 值 public void SetPrivateStaticField(string fieldName, object value) { var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Static); field?.SetValue(null, value); } /// /// 获取某个类中的某个私有静态属性的值 /// /// /// 属性名称 /// public T? GetPrivateStaticProperty(string propertyName) { var property = type.GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Static); return (T?)property?.GetValue(null); } /// /// 设置某个类中的某个私有静态属性的值 /// /// 属性名称 /// 值 public void SetPrivateStaticProperty(string propertyName, object value) { var property = type.GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Static); property?.SetValue(null, value); } /// /// 调用某个类中的某个私有静态方法 /// /// /// 方法名称 /// 传入参数 /// public T? InvokePrivateStaticMethod(string methodName, params object[] parameters) { var method = type.GetMethod(methodName); return (T?)method?.Invoke(null, parameters); } } /// extension(object obj) { /// /// 调用某个类中的某个私有方法 /// /// /// 方法名称 /// 传入的参数 /// public T? InvokePrivateMethod(string methodName, params object[] parameters) { var method = obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); return (T?)method?.Invoke(obj, parameters); } /// /// 调用某个类中的某个私有方法 /// /// 方法名称 /// 传入参数 public void InvokePrivateMethod(string methodName, params object[] parameters) { var method = obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); method?.Invoke(obj, parameters); } } }