通过反射技术获得实例对象的属性值
2011-06-21 15:05
281 查看
c#2.0开始支持c++里常用的泛型技术,比如泛型的容器,模板函数等,但是c#对于泛型的支持还是很有限,比如不支持模板的特化、偏特化等,并且c#里的泛型也不是真正如c++里那样的泛型,而是把模板参数转型成所有类型的根object来实现的,从这个意义上说,只是一种伪泛型,不是真实的泛型,不过它的泛型底层实现与c++不同,c++在编译的时候对于每一个模板实例都会产生一份代码,大量使用模板的结果就是代码体积膨胀。废话少说,看看c#里怎么写一个模板函数。
class Foo
{
public void Fun<T>(T v)
{
Console.WriteLine(v.ToString());
}
}
怎么读取模板参数里的一个属性值呢?比如下面一个类
class Foo
{
string _name = string.Empty;
int _age = 0;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
}
class Test
{
static void Main(string[] args)
{
Foo foo = new Foo();
foo.Name = "张三";
foo.Age = 83;
Test t = new Test();
//foo的Age属性值
//打印出来的结果将是
//Age:83
t.Fun<Foo>(foo, "Age");
}
public void Fun<T>(T v, string property)
{
Type objType = v.GetType();
try
{
PropertyInfo p = objType.GetProperty(property);
object obj = p.GetValue(v, null);
Console.WriteLine("{0}:{1}", property, obj.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception : " + e.ToString());
}
}
}
这里应用到的就是所谓反射技术(Reflection)。
class Foo
{
public void Fun<T>(T v)
{
Console.WriteLine(v.ToString());
}
}
怎么读取模板参数里的一个属性值呢?比如下面一个类
class Foo
{
string _name = string.Empty;
int _age = 0;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
}
class Test
{
static void Main(string[] args)
{
Foo foo = new Foo();
foo.Name = "张三";
foo.Age = 83;
Test t = new Test();
//foo的Age属性值
//打印出来的结果将是
//Age:83
t.Fun<Foo>(foo, "Age");
}
public void Fun<T>(T v, string property)
{
Type objType = v.GetType();
try
{
PropertyInfo p = objType.GetProperty(property);
object obj = p.GetValue(v, null);
Console.WriteLine("{0}:{1}", property, obj.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception : " + e.ToString());
}
}
}
这里应用到的就是所谓反射技术(Reflection)。
相关文章推荐
- Object get["属性"]; java反射技术通过对象和属性名得到属性值
- 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
- 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
- 通过反射获得类的实例对象
- java反射技术通过对象和属性名得到属性值
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- java利用反射技术遍历某个对象的属性及属性值
- java 反射通过get方法获得属性值
- Swing之Gridbaglayout使用以及通过反射技术验证属性表框实例
- 通过反射技术获取泛型真实实例
- 有哪几种方式获得Class类对象(实例)的方法?和对反射的理解和作用?
- 使用java反射技术完成对象所有属性值的输出
- C#通过反射获得类的实例简单实现
- 通过反射动态获得类实例
- 使用java反射技术完成对象所有属性值的输出
- Java中通过反射获得对象的属性信息
- 利用反射技术动态获取任意Java类实例的属性值
- 利用反射技术动态获取任意Java类实例的属性值
- 通过反射获得泛型的实例类型参数