public class ReflectDemo
{
public static void Main(string[] args)
{
C c = new C();
cN = "helloworld";
// 正常方式赋值
ConsoleWriteLine("正常方式赋值:");
ConsoleWriteLine(cN);
// 全反射方式
var type = typeof(C);
object obj = ActivatorCreateInstance(type);
// 属性赋值
PropertyInfo pInfo = typeGetProperty("N");
if (pInfo != null)
{
pInfoSetValue(obj, "helloworld", null);
// 测试是否已经属性赋值。
ConsoleWriteLine("测试是否已经属性赋值:");
ConsoleWriteLine(((C)obj)N);
// 用反射方式获取属性的值
ConsoleWriteLine("用反射方式获取属性的值:");
ConsoleWriteLine(pInfoGetValue(obj, null));
}
ConsoleRead();
}
}
C类代码如下:
public class C{
private string n;
public string N
{
get { return n; }
set { n = value; }
}
}
class Test{
public static void main(String[] args) {
A a = new A();
Systemoutprintln(getValueInField(a,"b1","i"));
Systemoutprintln(getValueInField(a,"b2","i"));
Systemoutprintln(getValueInField(a,"b3","i"));
}
public static Object getValueInField(Object obj,String field,String name){
//三个参数分别是外部的类的对象obj,作为成员属性的类的引用名,要查询的类内部的属性名
try {
Object o = objgetClass()getDeclaredField(field)get(obj);
return ogetClass()getDeclaredField(name)get(o);
} catch (Exception e) {
Systemoutprintln("查找失败");
return null;
}
}
}
class A{
B b1 = new B(1);
B b2 = new B(2);
}
class B{
int i;
B(int i){
thisi = i;
}
}
你所说的"DataSet的各个属性值"都是DataSet对象的非静态栏位属性值
也就是说获取这些值都需要他的实例化对象,而您通过Type获取到的属性均是该类型的特徵,而并非对象的值
比如typeGetValue(对象,属性)等
先获取Method对象
以下仅供参考
package comkiddtestzhidao;import javalangreflectMethod;
/
Hello world!
/
public class Main {
public static void main(String[] args) {
Method method1 = null;
Method method2 = null;
try {
method1 = ClassforName("comkiddtestzhidaoCat")getMethod("getName", (Class<>[]) null);
method2 = ClassforName("comkiddtestzhidaoCat")getMethod("getChilds", (Class<>[]) null);
} catch (NoSuchMethodException ex) {
exprintStackTrace();
} catch (SecurityException ex) {
exprintStackTrace();
} catch (ClassNotFoundException ex) {
exprintStackTrace();
}
if (null != method1) {
Systemoutprintln(method1getGenericReturnType()getTypeName());
}
if (null != method2) {
Systemoutprintln(method2getGenericReturnType()getTypeName());
}
}
}
class Cat {
private String name;
private Cat[] childs;
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public Cat[] getChilds() {
return childs;
}
public void setChilds(Cat[] childs) {
thischilds = childs;
}
}
以上就是关于C#如何通过属性名称反射出属性本身全部的内容,包括:C#如何通过属性名称反射出属性本身、java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。、C# 反射之如何获得DataSet属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)