C#中反射有啥用?实际点的 呵呵。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例如,运行期获得一个窗体的名字是个字符串,但是你想根据字符串找到该窗体,就要用到反射了。==================================================================博客空间:http://blog.csdn.net/lovingkiss资源下载:http://download.csdn.net/user/lovingkiss优惠接单开发,组件控件定制开发,成品源代码批发联系方式:Q64180940 全天在线================================================================== 反射,可以理解为通过名称调用,其实这个概念很早就有了,像"CallByName"一样. 比如,你知道了类的名称,或某一个成员的名称,那么可以通过这个名称字符串来直接调用,比如:Type t = Type.GetType("System.Int32");object objValue = Activator.CreateInstance(t);Console.WriteLine(objValue);Console.WriteLine(objValue.GetType().FullName); 反射嘛就是动态识别类型并调用之,基本上你可以把它理解成.net的RTTI 动态加载, 更改, 增加...某个程序集下面例子中, ChangeValue类的myValue本是私有字段, 一般情况下在类外部是不能改它的值的, 但利用反射就能改了-----------------------------------------------------using System;using System.Reflection;class ChangeValue{ private string myValue; public ChangeValue(string str) { myValue = str; } public void WriteLine() { Console.WriteLine("MyValue is: " + myValue); }}class Test{ public static void Main(string[] args) { ChangeValue cv = new ChangeValue("old value"); cv.WriteLine(); Type t = cv.GetType(); FieldInfo field = t.GetField("myValue", BindingFlags.NonPublic |BindingFlags.Instance); field.SetValue(cv, "new value"); cv.WriteLine(); }}----------------------------------------------------再打个比方, 你要写一个播放器, 要支持如mp3, wmv, avi...等格式,你还希望用户能自己安装一个新的格式, 也就是我们常说的插件.在实现这些, 可能你要将每种格式都写成单个的解码程序集, 如mp3.dll, wmv.dll, avi.dll....这样当播放时, 根据扩展名去动态调用相应的解码程序集, 那么这时你就得用反射去动态加载这些dll了.如: Assembly.LoadFile ("...avi.dll")然后通过反射可以用avi.dll里面定义的类了 FieldInfo field = t.GetField("myValue", BindingFlags.NonPublic |BindingFlags.Instance);谁能解释一下?不公开的数据字段?或??? C#里如何监控windows用户对文件的修改? 老问题,新问。C#类库不显示智能提示 获取临时文件路径的问题 对一个dll文件反射后,如何才能做到资源的完全释放? 菜鸟求助:水晶报表分页的问题 C#结构体中的引用类型 C# Winform Panel 拖动图片到Panel外 一个登录程序,遇到一些问题 如何用SendMessage API让修改的系统环境变量立即生效,在线等!!! 请问这样做可以吗?关于connection释放的问题? 有谁精通CompileAssemblyFromSource的使用的阿?帮忙解答一下吧 web Service中添加一个Web.Config
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
优惠接单开发,组件控件定制开发,成品源代码批发
联系方式:Q64180940 全天在线
==================================================================
object objValue = Activator.CreateInstance(t);Console.WriteLine(objValue);
Console.WriteLine(objValue.GetType().FullName);
下面例子中, ChangeValue类的myValue本是私有字段,
一般情况下在类外部是不能改它的值的, 但利用反射就能改了
-----------------------------------------------------
using System;
using System.Reflection;class ChangeValue
{
private string myValue;
public ChangeValue(string str)
{
myValue = str;
}
public void WriteLine()
{
Console.WriteLine("MyValue is: " + myValue);
}
}
class Test
{
public static void Main(string[] args)
{
ChangeValue cv = new ChangeValue("old value");
cv.WriteLine(); Type t = cv.GetType();
FieldInfo field = t.GetField("myValue",
BindingFlags.NonPublic |BindingFlags.Instance);
field.SetValue(cv, "new value"); cv.WriteLine();
}
}
----------------------------------------------------
再打个比方, 你要写一个播放器, 要支持如mp3, wmv, avi...等格式,
你还希望用户能自己安装一个新的格式, 也就是我们常说的插件.
在实现这些, 可能你要将每种格式都写成单个的解码程序集, 如
mp3.dll, wmv.dll, avi.dll....
这样当播放时, 根据扩展名去动态调用相应的解码程序集, 那么这时你就得
用反射去动态加载这些dll了.如: Assembly.LoadFile ("...avi.dll")
然后通过反射可以用avi.dll里面定义的类了
BindingFlags.NonPublic |BindingFlags.Instance);谁能解释一下?不公开的数据字段?或???