调试新模版

Literacy 对象属性,字段访问组件
构造函数
public Literacy(Type)

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

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

初始化对象属性,字段访问组件,参数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
方法
object NewObject()

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

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

加载更多属性或字段

默认初始化仅加载公共的实例属性
需要支持其他属性或字段需使用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
ObjectPropertyCollection Property

属性集合

默认初始化仅加载公共的实例属性
需要加载其他属性需使用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
ObjectPropertyCollection Field

字段集合

默认值为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
静态方法
Literacypublic class Literacy Cache(Type,bool)

从缓存中获取一个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
LiteracyNewObject public delegate object LiteracyNewObject(params object[] args); CreateNewObject(Type,Type[])

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

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

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

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

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

LiteracyGetter get = Literacy.CreateGetter(typeof(string).GetField("m_firstChar", BindingFlags.NonPublic | BindingFlags.Instance));
char c = (char)get("123456789");
//c == '1'
View Code
LiteracySetter public delegate void LiteracySetter(object obj, object value);  CreateSetter(PropertyInfo)

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

DataTable table = new DataTable();
table.TableName = "User";
LiteracySetter set = Literacy.CreateSetter(table.GetType().GetProperty("TableName"));
set(table,"NewTableName");
//table.TableName = "NewTableName"
View Code
LiteracySetter public delegate void LiteracySetter(object obj, object value);  CreateSetter(FieldInfo)

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

LiteracySetter set = Literacy.CreateSetter(typeof(string).GetField("m_firstChar", BindingFlags.NonPublic | BindingFlags.Instance));
string s = "123456789";
set(s,'a');
//s = "a23456789"
View Code
LiteracyCaller public delegate object LiteracyCaller(object obj, params object[] args);  CreateCaller(MethodInfo)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值