标签:style blog io ar color 使用 sp for on
下边这段是百度对Ognl的定义:
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
根据这段描述可以得知,Ognl表达式允许我们使用一种统一的语法来操作对象的属性、方法等。Ognl表达式比较强大的地方在于它能链式的调用方法。什么是链式的调用方法?比如一个对象A里包含另外一个对象B,如果我们有一个A的实例,但想调用B的某个方法,该怎么办?再深入N层呢?使用Ognl可以一层层深入调用方法,只需要简洁的语法就能实现。下面来看看怎么使用Ognl表达式来操作对象的属性、方法。
先设定两个类。
class Dog{ public string _name; public int _age; public DogKiller dk=new DogKiller(); public Dog(string name,int age){ this._name = name; this._age = age; } public void talk(string message){ Debug.Log(string.Format("我的名字叫{0},我今年{1}岁了,我想对你说,{2}!",_name,_age,message)); } } class DogKiller{ public void Kill(string msg){ Debug.Log(string.Format("我是狗狗杀手,我想说:{0}!!!",msg)); } public static void Threat(string msg){ Debug.Log(string.Format("你这家伙,{0}?离我远点!",msg)); } }
调用类的属性。
Dog littledog = new Dog("xiaobai",5); //获取属性 string dogname = (string)ognl.Ognl.getValue("_name",littledog); Debug.Log(dogname); //输出为:xiaobai
现在创建一个上下文对象。Ognl通过上下文来存储参数数据。假如不传入上下文,Ognl会自动创建一个默认的上下文对象。
Dictionary<string,string> context = new Dictionary<string,string>(); context.Add("msg","Hello World");
为了访问上下文中的数据,可以在前面加上#号。
//调用方法,#msg表示访问上下文中的对象 //Ognl通过上下文(context)来处理事务,如果不传入上下文,会创建一个默认的上下文对象 //上下文通常用来存储数据 ognl.Ognl.getValue("talk(#msg)",context,littledog); //输出为:我的名字叫xiaobai,我今年5岁了,我想对你说,Hello World!
现在我想访问Dog里面的DogKiller属性的方法Kill(),是时候使用链式调用了。
context.Add("dk","我是一个杀手!"); //链式方法调用 ognl.Ognl.getValue("dk.Kill(#dk)",context,littledog); //输出为:我是狗狗杀手,我想说:我是一个杀手!!!!
那么如何调用静态方法?对于静态方法,需要传入一个类名,格式为@classname@methodname。
context.Add("threat","你不想活了吗?"); //调用静态方法需提供类名,格式为"@classname@methodname(#param)" ognl.Ognl.getValue("@DogKiller@Threat(#threat)",context,littledog); //输出为:你这家伙,你不想活了吗??离我远点!
Ognl还能够创建类型实例、通过下标来访问数组等集合等其它功能。不过这些功能用的不多,更多时候还是进行调用方法、访问属性等操作,因此先掌握基本的操作,假如有其它需要再详细研究。
标签:style blog io ar color 使用 sp for on
原文地址:http://www.cnblogs.com/amazonove/p/4158458.html