• 调试新模版


    Literacy
    构造函数

    初始化对象属性,字段访问组件,建立大小写敏感的访问实例

    var user = new { Name = "blqw", Sex = "" };
    Literacy lit = new Literacy(user.GetType());
    string name = (string)lit.Property["Name"].GetValue(user);
    //name = "blqw"
    View Code

    初始化对象属性,字段访问组件,参数2指示是否需要区分大小写

    默认初始化仅加载公共的实例属性
    需要支持其他属性或字段需使用Load中的相关方法
    var user = new { Name = "blqw", Sex = "" };
    Literacy lit = new Literacy(user.GetType(),true);
    string name = (string)lit.Property["Name"].GetValue(user);
    //name = "blqw"
    string name2 = (string)lit.Property["name"].GetValue(user);//不区分大小写
    //name2 = "blqw"
    View Code
    方法

    调用对象的无参构造函数,新建对象

    Literacy lit = new Literacy(typeof(Guid));
    Guid g = (Guid)lit.NewObject();
    //g = 00000000-0000-0000-0000-000000000000
    View Code
    属性

    加载更多属性或字段

    默认初始化仅加载公共的实例属性
    需要支持其他属性或字段需使用Load中的相关方法
    string str = "abc";
    Literacy lit = new Literacy(str.GetType());
    lit.Load.NonPublicField();  //加载非公共的实例字段
    Char c = (char)lit.Field["m_firstChar"].GetValue(str);
    //c = 'a';
    View Code

    属性集合

    默认初始化仅加载公共的实例属性
    需要加载其他属性需使用Load中的相关方法
    var user = new { Name = "blqw", Sex = "" };
    Literacy lit = new Literacy(user.GetType());
    string name = (string)lit.Property["Name"].GetValue(user);
    //name = "blqw"
    bool b = lit.Property["Sex"].TrySetValue(user, "");
    //b = false user.Sex = "男"
    lit.Property["Sex"].SetValue(user, "");
    //抛出异常: throw new Exception("属性没有公开的Set访问器");
    View Code

    字段集合

    默认值为null
    加载字段需使用Load中的相关方法
    string str = "abc";
    Literacy lit = new Literacy(str.GetType());
    lit.Load.NonPublicField();  //加载非公共的实例字段
    Char c = (char)lit.Field["m_firstChar"].GetValue(str);
    //c = 'a';
    lit.Field["m_firstChar"].SetValue(str, 'A');
    //str = "Abc";
    View Code
    静态方法

    从缓存中获取一个Literacy对象,如果没有则新建缓存2013.08.30新

    参数2指示,该Literacy对象是否需要区分大小写
    这个方法是线程安全的
    var user = new { Name = "blqw", Sex = "" };
    Literacy lit1 = Literacy.Cache(user.GetType(), true);
    Literacy lit2 = Literacy.Cache(user.GetType(), false);
    Literacy lit3 = Literacy.Cache(user.GetType(), true);
    bool b1 = lit1 == lit2;
    bool b2 = lit1 == lit3;
    View Code

    IL构造一个用于调用对象构造函数的委托

    参数1:获取构造函数的对象
    参数2:构造函数的参数,默认null
    LiteracyNewObject nb = Literacy.CreateNewObject(typeof(Guid));
    Guid g = (Guid)nb();
    //g = 00000000-0000-0000-0000-000000000000
    View Code

    IL构造一个用于获取对象属性值的委托

    DataTable table = new DataTable();
    table.TableName = "User";
    LiteracyGetter get = Literacy.CreateGetter(table.GetType().GetProperty("TableName"));
    var tableName = get(table);
    //tableName = "User"
    View Code

    IL构造一个用于获取对象字段值的委托

    LiteracyGetter get = Literacy.CreateGetter(typeof(string).GetField("m_firstChar", BindingFlags.NonPublic | BindingFlags.Instance));
    char c = (char)get("123456789");
    //c == '1'
    View Code

    IL构造一个用于设置对象属性值的委托

    DataTable table = new DataTable();
    table.TableName = "User";
    LiteracySetter set = Literacy.CreateSetter(table.GetType().GetProperty("TableName"));
    set(table,"NewTableName");
    //table.TableName = "NewTableName"
    View Code

    IL构造一个用于设置对象字段值的委托

    LiteracySetter set = Literacy.CreateSetter(typeof(string).GetField("m_firstChar", BindingFlags.NonPublic | BindingFlags.Instance));
    string s = "123456789";
    set(s,'a');
    //s = "a23456789"
    View Code

    IL构造一个用于执行方法的委托

    LiteracyCaller met = Literacy.CreateCaller(typeof(Guid).GetMethod("ToString", new[] { typeof(string) }));
    string s = (string)met(Guid.NewGuid(), "N");
    //s = "4b857b9807f900009e37726b10187d4c"
    s = (string)met(Guid.NewGuid(), "");
    //s = "4b857b98-07f9-0000-b18a-872db2409a43"
    View Code
  • 相关阅读:
    C# 中的委托和事件
    SQLserver2000与2005同时安装的问题
    又到毕业时
    WCF服务发布和调用IIS服务
    进销存取项目总结
    URL
    undefined reference to `android::Mutex::lock()'
    关于 ffmpeg ‘UINT64_C’ was not declared in this scope 的错误
    Ti 的 OMX_Core
    linux Perforce 使用
  • 原文地址:https://www.cnblogs.com/blqw/p/3291133.html
Copyright © 2020-2023  润新知