MyException - 我的异常网
当前位置:我的异常网» ASP.NET » 随笔谈反照Reflection创建三部曲 PS(只是谈谈基础

随笔谈反照Reflection创建三部曲 PS(只是谈谈基础中的基础!)

www.MyException.Cn  网友分享于:2013-09-19  浏览:0次
随笔谈反射Reflection创建三部曲 PS(只是谈谈基础中的基础!)

step one:(找入口)

  using System.Reflection; //引用需要用到的命名空间

  做任何事都要有开始的地方,不例外,反射也要先找到反射的入口,举个栗子: Assembly assemble = Assembly.Load("SqlServer");  //反射的入口::动态的加载dll

step two:(获类型)

  加载完DLL之后,根据类的完整名称找到类型,再举个栗子: Type type = assemble.GetType("SqlServer.Class1");  //SqlServer.Class1就是SqlServer中的一个类

知道类之后可以通过循环遍历找到类中所有的方法名:

         

 Console.WriteLine("*************GetMethods**************");
          foreach (MethodInfo method in type.GetMethods())
          {
            Console.WriteLine("名称{0}",method.Name);
          }

 

step three:(搞对象)

  下面就要根据step two中获取的类型创对象,有了对象一切就都好办了,举例:object oBject = Activator.CreateInstance(type);  //根据类型,创建对象,由于不知道对象类型所以只能object

 

再下来就是使用对象了,围绕着对象做一些事情

具体的使用方法举栗:

MethodInfo show1 = type.GetMethod("show1",new Type[] { }); //show1是类中的方法且是无参的
show1.Invoke(oBject,null);

MethodInfo show2 = type.GetMethod("show2", new Type[] { typeof(int) }); //show2方法是有参数的

show2.Invoke(oBject, new object[] { 22});

 

要放大招了,准备好!````````````````````````````````````````````````````````````````````简直黑科技

你知道吗,通过反射可以调用类的私有方法,只能说也是贼溜了。

MethodInfo show3 = type.GetMethod("show3", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);//通过反射调用私有方法
show3.Invoke(oBject, null);

 

附上SqlServer.Class1的代码:

 

 

 

 1 public void show1()
 2 {
 3 
 4 Console.WriteLine("方法是{0}",this.GetType());
 5 
 6 }
 7 
 8 public void show2(int id)
 9 
10 {
11 
12 Console.WriteLine("这是show2方法(有参的){0}",id);
13 
14 }
15 
16 private void show3()
17 { 
18 Console.WriteLine("这是私有方法{0}",this.GetType());
19 }

 

同理 运用反射操作表结构----------------------------------------------------------

1.命名空间下的元素的默认访问修饰符

public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。

internal : 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。 

 

2.各类型中的成员的默认访问修饰符

剩下的修饰符主要是正对继承这个语言特性的,拥有继承的类型有两个类(class)和接口(interface)。public,internal同样可以用于类型成员。

private : 同一类和结构的代码可以访问该类型和成员。

protected : 同一类和派生(继承特性)类中的代码可以访问该类型和成员。

protected internal :  同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。

 

MSDN提示 :

1.) 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类 A 派生的公共类 B。如果允许这种情况,将会使 A 成为公共类,因为 A 的所有受保护的成员或内部成员都可以从派生类访问。 

2.) 成员的可访问性决不能高于其包含类型的可访问性。 

3.) 可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。 

 

接口(interface)

接口成员访问修饰符默认为public,且不能显示使用访问修饰符。

 

类(class)

构造函数默认为public访问修饰符。

析构函数不能显示使用访问修饰符且默认为private访问修饰符。 

类的成员默认访问修饰符为private; 

 

枚举(enum)

枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。

 

结构(struct) 

结构成员默认为private修饰符。 

结构成员无法声明为protected成员,因为结构不支持继承。 

 

嵌套类型

嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。

文章评论

5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
10个调试和排错的小建议
10个调试和排错的小建议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我的丈夫是个程序员
我的丈夫是个程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
旅行,写作,编程
旅行,写作,编程
总结2014中国互联网十大段子
总结2014中国互联网十大段子
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员应该关注的一些事儿
程序员应该关注的一些事儿
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员都该阅读的书
程序员都该阅读的书
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
老程序员的下场
老程序员的下场
漫画:程序员的工作
漫画:程序员的工作
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
程序员和编码员之间的区别
程序员和编码员之间的区别
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
为什么程序员都是夜猫子
为什么程序员都是夜猫子
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
中美印日四国程序员比较
中美印日四国程序员比较
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Java程序员必看电影
Java程序员必看电影
代码女神横空出世
代码女神横空出世
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
鲜为人知的编程真相
鲜为人知的编程真相
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
编程语言是女人
编程语言是女人
我是如何打败拖延症的
我是如何打败拖延症的
那些争议最大的编程观点
那些争议最大的编程观点
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员必看的十大电影
程序员必看的十大电影
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何成为一名黑客
如何成为一名黑客
程序员的鄙视链
程序员的鄙视链
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有