!如何取得方法中所有调用的类!

kfdsaas 2008-07-07 09:15:35
如何在不运行某方法的情况下取得某个方法中所有直接调用(依赖)的类的信息。
如:
public class Root
{
public void test(Animal a)
{
Person p = new Person('kfdsaas');
a.Cry();
}
}

我想取得Type[]数组其中包括 Person,Animal。
Person,Animal中成员的类型可以不用取得
...全文
269 41 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
kfdsaas 2008-07-13
  • 打赏
  • 举报
回复
虽然没有找到比较好的解决方案,还是要谢谢大家的参与
kfdsaas 2008-07-10
  • 打赏
  • 举报
回复
目前看来似乎只有21楼的思路具有一定可行性
kfdsaas 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 shoushii 的回复:]
微软动态加载了所有的动态链接库DLL到程序集缓冲池,所以可以着色。如果该程序集没有被加载,也不会着色的。
[/Quote]

但是具体又是如何取得方法中的类型的呢?
yagebu1983 2008-07-10
  • 打赏
  • 举报
回复
关注一下!!!
shoushii 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 kfdsaas 的回复:]
引用 35 楼 shoushii 的回复:
微软动态加载了所有的动态链接库DLL到程序集缓冲池,所以可以着色。如果该程序集没有被加载,也不会着色的。


但是具体又是如何取得方法中的类型的呢?
[/Quote]
没深入分析过,呵呵。等你有了解决方案希望能分享。
21楼的应该有可行性
HimeTale 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kfdsaas 的回复:]
引用 6 楼 dolphin_sail 的回复:
反射对象实体, 解析字符串吧

如何分辨一个字符串是类名还是变量?还有类名的命名空间是哪个?
[/Quote]
如果只调了某个类的静态方法不算依赖关系的话,
声明过并且后面调用new了的就是。
wss1801 2008-07-09
  • 打赏
  • 举报
回复
jf
xhan2000 2008-07-09
  • 打赏
  • 举报
回复
有点意思
suyiming 2008-07-09
  • 打赏
  • 举报
回复
有想法,可惜我不会~
烈火焚身 2008-07-09
  • 打赏
  • 举报
回复
有想法,可惜我不会~
begonia_ref 2008-07-09
  • 打赏
  • 举报
回复

public Type[] Test1()
{
Type t = typeof(Root);
MethodInfo info = t.GetMethod("test");
Type[] types = new Type[info.GetParameters().Length + info.GetMethodBody().LocalVariables.Count+1];
int i = 0;
foreach (ParameterInfo para in info.GetParameters())//参数
{
//Response.Write(para.ParameterType+"<br/>");
types[i] = para.ParameterType;
i++;
}

foreach (LocalVariableInfo var in info.GetMethodBody().LocalVariables)//局部变量
{
//Response.Write(var.LocalType+"<br/>");
types[i] = var.LocalType;
i++;
}

//Response.Write(info.ReturnParameter.ParameterType);//返回类型
types[i] = info.ReturnParameter.ParameterType;
return types;
}
begonia_ref 2008-07-09
  • 打赏
  • 举报
回复

public void Test1()
{
Type t = typeof(Root);
MethodInfo info = t.GetMethod("test");
foreach (ParameterInfo para in info.GetParameters())//参数
{
Response.Write(para.ParameterType+"<br/>");
}

foreach (LocalVariableInfo var in info.GetMethodBody().LocalVariables)//局部变量
{
Response.Write(var.LocalType+"<br/>");
}

Response.Write(info.ReturnParameter.ParameterType);//返回类型

}
kfdsaas 2008-07-09
  • 打赏
  • 举报
回复
没有办法吗?
GengWH 2008-07-09
  • 打赏
  • 举报
回复
public void hello()
{
Type t = typeof(Root);
MethodInfo info = t.GetMethod("test");
foreach (ParameterInfo para in info.GetParameters())//参数
{
Response.Write(para.ParameterType+"<br/>");
}

foreach (LocalVariableInfo var in info.GetMethodBody().LocalVariables)//局部变量
{
Response.Write(var.LocalType+"<br/>");
}

Response.Write(info.ReturnParameter.ParameterType);//返回类型

}
shoushii 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kfdsaas 的回复:]
vs2005的语法着色是怎么做到的?
[/Quote]
微软动态加载了所有的动态链接库DLL到程序集缓冲池,所以可以着色。如果该程序集没有被加载,也不会着色的。

关于反射工具,应该是通过IL语言,同时也进行了程序集加载,生成反编译代码。
Catmaoo 2008-07-09
  • 打赏
  • 举报
回复
Assembly
fellowcheng 2008-07-09
  • 打赏
  • 举报
回复
直接分析IL代码吧
datahandler2 2008-07-09
  • 打赏
  • 举报
回复
我也做不到。俄~~~~好难的问题。有点钻牛角尖了。也许以后钻出来就是牛人了。期待~~~
guying999 2008-07-09
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Type t = typeof(Form1);
MethodInfo[] info = t.GetMethods();
foreach (MethodInfo i in info)
{
if (i.Name.ToLower().IndexOf("load") > -1)
{
MessageBox.Show(i.Name);
}
}

}

}
}

kfdsaas 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 winner2050 的回复:]
肯定能作出来.VS 就已经实现了.
[/Quote]
winner2050 有什么好的建议吗?
加载更多回复(21)
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent

62,248

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧