C#如何通过属性名称反射出属性本身

C#如何通过属性名称反射出属性本身,第1张

    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属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9731941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存