logo
 
 
|
|
|
|
|
|
|
|
 
 
您的位置:首页 - 专业知识
浅谈“反射”在java及.net技术中的运用
[2010-02-26]
浅谈“反射”在java及.net技术中的运用



作者:北大青鸟南京中博-张宪芝
南京航空航天大学计算机技术研究生,曾前往德国交流,多年高校及软件开发公司工作经验。

        S2第二门课程<<深入.NET平台和C#编程>>中提及到反射的概念,但内容单薄,在这里稍许补充些相关内容,以便于同学们学习。

        一、Java反射:

        我们先来看看在java中是如何做到反射的:

        反射的条件,首先要有对象。有两个步骤,1.加载类,2.产生对象

package com.zbitedu.utility;

public class Student {

    public String sayHello(String s) {

        return s+",Hello";

    }

}

 

package com.zbitedu.utility;

 

import java.lang.reflect.Method;

 

public class ReflectionTest {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        String className="com.zbitedu.utility.Student";

        try {

            Class class1=Class.forName(className);//加载类

            //不知道类如何构造,用下面方法

            Object object=class1.newInstance();

            Method method=class1.getMethod("sayHello", String.class);//获取方法

            String string =(String)method.invoke(object, new Object[]{"zbitedu"});//执行方法

            System.out.println(string);

           

        } catch (Exception e) {

            // TODO: handle exception

            e.printStackTrace();

        }

    }

}

    输出为zbitedu,Hello

既然在class中有getMethod方法,肯定还有getFiled等等方法,大家可以自己去扩展。我们还可以根据getConstructor构造方法来创造实例。

 

二、C#反射


   
其实和Java没有多大区别,做代码如下:

 

namespace ReflectionTest

{

    class Student

    {

        public string SayHello(string s)

        {

            return s + ",Hello";

        }

    }

}

 

 

namespace ReflectionTest

{

    class Program

    {

        static void Main(string[] args)

        {

            Type t = Type.GetType("ReflectionTest.Student");

            Assembly ass = Assembly.GetAssembly(t);//相当于Java中的加载

            object obj = ass.CreateInstance("ReflectionTest.Student");

            MethodInfo m = t.GetMethod("SayHello");

            string s=(string)m.Invoke(obj,new object[] {"zbitedu"});

            Console.WriteLine(s);

        }

    }

}

        总结:

        两种语言在互相学习,互相COPY,反射思路一样的。只不过在JAVA中,用的是CLASS,而C#用的是TYPE。

上一篇:QTP输出值的另一种使用
   
上海万得信息技术股份有限公司 上海万得信息技术股份有限公司
恭喜我中心学员章哲入职文思创新软件技术有限公司 恭喜我中心学员章哲入职文思创新软件技术有限公司
乔布斯再次炮轰Adobe Flash技术陈旧漏洞多 乔布斯再次炮轰Adobe Flash技术陈旧漏洞多
乐金将在粤投入最新最受欢迎的液晶技术 乐金将在粤投入最新最受欢迎的液晶技术
 

在线报名

  • 姓       名:*
  • 高考成绩:*
  • 电       话:*
  • 地       址:*
 
课程咨询
 

 
中博教育客服在线
 
©南京北大青鸟 隐私政策
学费咨询
学历咨询
专业咨询
订座试听
就业咨询
课程咨询
测试认证
软件认证