首页 新闻 搜索 专区 学院

反射遇到的问题

0
悬赏园豆:15 [已解决问题] 解决于 2008-06-04 13:47
<P>这个反射是该怎么写的呀?</P> <P>Register是CommonUserOperation类下的方法,ICommonUser接口</P> <P>CommonUserProperty继承了这个接口,&nbsp;</P> <P>,我想用反射得到所有属性值,</P> <P>红颜色 Load()该怎么写呀?我看了MSDN要加引用,不明白,请指点。</P> <P>public bool Register(ICommonUser user)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>Assembly theAssembly = Assembly.Load(user.ToString());<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (theAssembly == null) return false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type type = theAssembly.GetType();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyInfo[] myProperty = type.GetProperties();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object[] param = new object[myProperty.Length];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //param = myProperty.CopyTo(param, 0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; myProperty.Length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param[i] = myProperty[i].GetValue(myProperty, null);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DiseaseDetails dis = new DiseaseDetails();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (bool)dis.Execute("CommonUserRegister", "int", param);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P> <P>上面代码调用时出错:"未能加载文件或程序集“UserRegister.CommonUserProperty”或它的某一个依赖项。系统找不到指定的文件。"</P>
weblogical的主页 weblogical | 初学一级 | 园豆:6
提问于:2008-05-28 17:55
< >
分享
最佳答案
0
没有看懂你要干什么。如果你是想取出传入的对象的所有Public属性,下面的代码可能更简单。 public bool Register(ICommonUser user) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(user); object[] param = new object[properties.Count]; foreach (PropertyDescriptor prop in properties) { param[i++] = prop.GetValue(user); } // do others... }
Colin Han | 老鸟四级 |园豆:3041 | 2008-05-29 13:12
其他回答(3)
0
Assembly.Load(string assemblyName)的参数是程序集的名字,而不是一个类的名字。 请参考:http://msdn.microsoft.com/zh-cn/library/ky3942xh(VS.80).aspx
玉开 | 园豆:8822 (大侠五级) | 2008-05-28 17:58
0
我觉得用Assembly.Load来载入程序集, 和使用Type来加载,我觉的是不是应该Type性能更好? Type应该是直接加载Bin目录下的DLL,而Bin目录下的应该是以及被保存在缓存中了。而Assmebly.Load应该是去相应目录去找程序集,然后加载的吧 ??
荒芜 | 园豆:335 (菜鸟二级) | 2008-05-29 11:38
0
SampleAssembly = Assembly.Load(“Cigem.SQLServerDAL.Account”); 其中,Account为类。 这里要求你的dll是强制签名的,否则会报错。未能加载文件或程序集... // Assembly.Load("Cigem.SQLServerDAL, 1.0.0.0, neutral, 6c13c48089e0ee07")
mjgforever | 园豆:335 (菜鸟二级) | 2008-05-29 22:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册