核心源码再下里,这一篇只有各个实体和反射扩展方法
中篇就干点正事儿吧。
先把几个实体类放上来拿去用。
字段是这里
using System;using System.CodeDom;namespace CodeMacker{public class FieldEntity{public FieldEntity(string fieldName,Type fieldType){this.Name = fieldName;this.Type = fieldType;}/// <summary>/// 字段名称/// </summary>public string Name { get; private set; }/// <summary>/// 字段类型/// </summary>public Type Type { get; private set; }/// <summary>/// 默认初始参数/// </summary>public object DefaultValue { get; set; } = default;/// <summary>/// 字段注释/// </summary>public string Comment { get; set; } = null;/// <summary>/// 字段类型,默认公开/// </summary>public MemberAttributes Attr { get; set; } = MemberAttributes.Public | MemberAttributes.Final;}}Field Area
属性是这里
using System;using System.CodeDom;namespace CodeMacker{public class PropertyEntity{public PropertyEntity(string propertyName, Type propertyType){this.Name = propertyName;this.Type = propertyType;}/// <summary>/// 属性名称/// </summary>public string Name { get; private set; }/// <summary>/// 属性类型/// </summary>public Type Type { get; private set; }/// <summary>/// 注释/// </summary>public virtual string Comment { get; set; } = null;/// <summary>/// 包含Set/// </summary>public bool HasSet { get; set; } = true;/// <summary>/// 包含Get/// </summary>public bool HasGet { get; set; } = true;/// <summary>/// 属性类型,默认公开/// </summary>public MemberAttributes Attr { get; set; } = MemberAttributes.Public | MemberAttributes.Final;}}Property Area
方法是这里
namespace CodeMacker{public class MethodEntity{/// <summary>/// 方法体/// </summary>public string Method { get; set; }/// <summary>/// 方法注释/// </summary>public string Comment { get; set; }}}Method Area
构造函数是这里
using System;using System.CodeDom;using System.Collections.Generic;namespace CodeMacker{public class ConstructorEntity{/// <summary>/// 参数级/// </summary>public List<ParamInfo> Params { get; set; }/// <summary>/// 构造函数类型/// </summary>public MemberAttributes Attr { get; set; } = MemberAttributes.Public | MemberAttributes.Final;}public class ParamInfo{public ParamInfo(Type paramType, string name){ParamType = paramType;Name = name;}/// <summary>/// 类型/// </summary>public Type ParamType { get; private set; }/// <summary>/// 名称/// </summary>public string Name { get; private set; }/// <summary>/// 赋值名称/// </summary>public string ReferenceName { get; private set; }}}Ctor Area
反射是这里
using System.Reflection;namespace CodeMacker{public static class CodeMackerReflection{public static FieldInfo GetField(this object obj, string fieldName, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetField(fieldName, bindingAttr);public static FieldInfo[] GetFields(this object obj, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetFields(bindingAttr);public static PropertyInfo GetPropertyInfo(this object obj, string propertyName, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetProperty(propertyName, bindingAttr);public static PropertyInfo[] GetPropertysInfo(this object obj, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetProperties(bindingAttr);public static MethodInfo GetMethod(this object obj, string methodName, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetMethod(methodName, bindingAttr);public static MethodInfo[] GetMethods(this object obj, BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)=> obj.GetType().GetMethods(bindingAttr);}}Reflection Area
可以看出除了第一个Macker其他都放上来了。
好像也写了不少,啊哈哈哈哈哈。自己骗自己。
重头戏就放到(下)吧
下一定是特别长的一章,嗯,一定是。
顺路再给自己创造个流量,虽然也不知道能干吗
————————————————
原文链接:https://www.cnblogs.com/SevenWang/p/15568027.html
