代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
利用反射调用一个继承层次上的函数族
作者:
/ 发布于
2011/1/14
/
646
利用反射调用一个继承层次上的函数族,比如安装程序,有安装数据库的,安装文件系统的等,命名均已“install”开始,你就可以将参数part设为“install”,src是其实类实例,root是终止父类
<div><span style="color: #008000">//</span><span style="color: #008000">利用反射调用一个继承层次上的函数族,比如安装程序,有安装数据库的,安装文件系统的等,命名均已“install”开始,你就可以将参数part设为“install”,src是其实类实例,root是终止父类</span><span style="color: #008000"> </span><span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #000000"><</span><span style="color: #000000">T</span><span style="color: #000000">></span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> invokeMethods(String part,T src,Class root) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> ExceptionManager{ </span><span style="color: #0000ff">if</span><span style="color: #000000"> (root</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">){ </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">root.isInstance(src))</span><span style="color: #0000ff">return</span><span style="color: #000000">; root</span><span style="color: #000000">=</span><span style="color: #000000">(Class)root.getGenericSuperclass(); } HashMap</span><span style="color: #000000"><</span><span style="color: #000000">String,Method</span><span style="color: #000000">></span><span style="color: #000000"> invokees</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap</span><span style="color: #000000"><</span><span style="color: #000000">String,Method</span><span style="color: #000000">></span><span style="color: #000000">(); Class target</span><span style="color: #000000">=</span><span style="color: #000000">src.getClass(); </span><span style="color: #0000ff">do</span><span style="color: #000000">{ Method [] methods</span><span style="color: #000000">=</span><span style="color: #000000">target.getDeclaredMethods(); </span><span style="color: #0000ff">for</span><span style="color: #000000"> (Method method:methods){ String mn</span><span style="color: #000000">=</span><span style="color: #000000">method.getName(); Boolean isPass</span><span style="color: #000000">=</span><span style="color: #000000">mn.startsWith(part); </span><span style="color: #0000ff">if</span><span style="color: #000000"> (isPass){ Integer nopt</span><span style="color: #000000">=</span><span style="color: #000000">method.getParameterTypes().length; Boolean isStatic</span><span style="color: #000000">=</span><span style="color: #000000">Modifier.isStatic(method.getModifiers()); </span><span style="color: #0000ff">if</span><span style="color: #000000"> ((nopt</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">)</span><span style="color: #000000">&&</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isStatic)){ </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">invokees.containsKey(mn)) invokees.put(mn, method); } } } target</span><span style="color: #000000">=</span><span style="color: #000000">(Class)target.getGenericSuperclass(); }</span><span style="color: #0000ff">while</span><span style="color: #000000">(target</span><span style="color: #000000">!=</span><span style="color: #000000">root); Iterator</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> methods</span><span style="color: #000000">=</span><span style="color: #000000">invokees.keySet().iterator(); </span><span style="color: #0000ff">while</span><span style="color: #000000"> (methods.hasNext()){ Method invokee</span><span style="color: #000000">=</span><span style="color: #000000">invokees.get(methods.next()); Boolean access</span><span style="color: #000000">=</span><span style="color: #000000">invokee.isAccessible(); invokee.setAccessible(</span><span style="color: #0000ff">true</span><span style="color: #000000">); </span><span style="color: #0000ff">try</span><span style="color: #000000"> { invokee.invoke(src); } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InvocationTargetException e) { </span><span style="color: #0000ff">throw</span><span style="color: #000000"> ExceptionManager.wrap(e.getTargetException()); }</span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Exception e){} invokee.setAccessible(access); } }</span> </div>
试试其它关键字
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3